我正在尝试 maven 多模块项目 https://github.com/shekharkhairnar/maven-multimodule-example
以下是我的项目结构:
我在父项目上做了 mvn clean install
并移动到 sktech-buseness/target 和
当我执行 java -jar sktech-business-1.0-SNAPSHOT.jar
我在 sktech-business-1.0-SNAPSHOT.jar 中得到 no main manifest 属性
我试过maven assembly plugin, shad plugin但是没用
--编辑---
在“konstantin-annikov”发表评论后,我将 maven-jar-plugin 添加到 sktech-business pom 文件中:
<build>
<plugins>
<plugin>
<!-- Build an executable JAR -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>org.sktech.business.BusinessTest</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
但运行 jar 时出现异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/sktch/domain/Student
at org.sktech.business.BusinessTest.main(BusinessTest.java:12)
Caused by: java.lang.ClassNotFoundException: org.sktch.domain.Student
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
非常感谢任何帮助。
最佳答案
让我们检查您的 list 文件。您可以使用任何解压缩实用程序简单地解压缩您的 .jar 文件。 (jar 格式基于流行的 ZIP 格式)。
当我打开 sktech-business-1.0-SNAPSHOT/META-INF/MANIFEST.MF 时,我看到以下内容:
list .MF:
Manifest-Version: 1.0
Created-By: Apache Maven 3.5.0
Built-By: guicey
Build-Jdk: 11.0.5
Class-Path: lib/sktech-domain-1.0-SNAPSHOT.jar
Main-Class: org.sktech.business.BusinessTest
您的应用程序期望在 lib/sktech-domain-1.0-SNAPSHOT.jar 中找到其他 java 类来运行您的应用程序。因此,您运行以下命令的目录 java -jar sktech-business-1.0-SNAPSHOT.jar 应该有一个 lib 目录,其中包含一个名为 sktech-domain-1.0-SNAPSHOT.jar 的文件。
如果您不想复制/移动目录,您可以使用以下 Maven 插件将所有依赖类复制到带有依赖项的 jar 中。将以下代码片段添加到主类所在模块中的 pom.xml 文件中:maven-multimodule-example/sktech-business/pom.xml。
maven-assembly-plugin 片段:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<mainClass>org.sktech.business.BusinessTest</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
并且您可以通过执行以下命令来运行具有依赖项的 jar:java -jar sktech-business-1.0-SNAPSHOT-jar-with-dependencies.jar
程序输出:
[ComplimentryCourse(id=1, name=Java 8 Fetures), ComplimentryCourse(id=2, name=Advance Java), ComplimentryCourse(id=3, name=Spring Boot), ComplimentryCourse(id=4, name=Database Management)]
关于java - Intellij 多模块 Maven 项目找不到主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68436004/