java - Intellj多模块maven项目找不到主类
问题描述
我正在尝试 maven 多模块项目https://github.com/shekharkhairnar/maven-multimodule-example
以下是我的项目结构:
我mvn clean install
在父项目上做了,然后搬到了 sktech-busness/target 和
当我执行java -jar sktech-business-1.0-SNAPSHOT.jar
我越来越no main manifest attribute, in sktech-business-1.0-SNAPSHOT.jar
我尝试过使用 maven 程序集插件、shad 插件但不使用
- 编辑 - -
在“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
任何帮助是极大的赞赏。
解决方案
让我们检查您的清单文件。您可以使用任何解压缩实用程序简单地解压缩您的 .jar 文件。(jar 格式基于流行的 ZIP 格式)。
当我打开sktech-business-1.0-SNAPSHOT/META-INF/MANIFEST.MF我看到以下内容:
清单.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-with-dependencies。将以下代码段添加到 Main-Class 所在模块中的 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)]
推荐阅读
- graph - 如何在 ArangoDB AQL 中进行图联合和交集
- airflow - 任务在气流中得到了意想不到的参数“dag”
- spring-boot - 将外部文件夹添加到 Spring Boot JAR
- javascript - 结果显示在控制台中,但不在浏览器中
- azure - “更新用户”操作给出“权限不足,无法完成操作。” Microsoft Graph API 中的错误
- node.js - ngFor中的角度ngIf条件用于显示类似按钮
- json - 如何在 swift 5 中使用 Alamofire 5 在 api 中传递带有其他参数的个人资料图像
- java - 错误:Java 运行时环境检测到致命错误
- java - 获取 FlywayException:SP2-0310:无法打开文件 - 当 sqlpus @ 与文件路径一起使用时
- typescript - 用于定义生成器的 Typescript 接口