繁体   English   中英

Execute Jar:无法加载或找到主类

[英]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文件的文件夹结构

生成JAR文件是否有问题?

addClassPathclassPathPrefix用于引用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM