[英]Execute Jar: Main class cannot be loaded or found
我正在尝试从我的项目中构建可执行的jar文件。
由于这是一个Maven项目,因此我正在尝试实现以下目标:
./mvnw package -Pdev -DskipTests
我得到了一个jarfile,所以直到这里一切正常为止。 但是,当我想使用以下命令执行jarfile时:
java -jar myproject-0.0.1-SNAPSHOT-jar-with-dependencies.jar
我收到一个错误,提示无法加载或找到主类。 我已经用谷歌搜索了这个问题,并在pom.xml
添加了以下几行:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.david.coinlender.CoinlenderApp</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
我已经声明了mainClass包和类名,但这没有帮助。
我认为问题可能是:jar文件中有一个文件夹类(包含已编译的类)。
我是否需要为classpathPrefix
添加属性classpathPrefix
? 到目前为止,我仅将其用于库。
谁能帮帮我吗?
亲切的问候,大卫
@Update:打开JAR文件时,我看到的结构与我的应用程序结构完全不同。 让我发布我所看到的屏幕截图:
生成JAR文件是否有问题?
addClassPath
和classPathPrefix
用于引用JAR文件外部存在的本地类或JAR文件。 这些指令对于引用已经包含在JAR文件中的类是不需要的。
听起来很奇怪,您的JAR文件中有一个文件夹classes
。 类文件应直接位于顶层,例如
$ jar tf myproject-0.0.1-SNAPSHOT-jar-with-dependencies.jar
META-INF/
META-INF/MANIFEST.MF
com/
com/david/
com/david/coinlender/
com/david/coinlender/CoinLenderApp.class
听起来您的项目没有遵循Maven标准目录布局 ,从而导致类文件存储在错误的位置。 这可能是造成您问题的原因吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.