Java 执行jar错误无法找到或加载主类
很抱歉出现另一个“找不到或加载主类”问题 我是Java新手。我找了一会儿,但找不到原因 我的项目是用Java 执行jar错误无法找到或加载主类,java,maven,jar,Java,Maven,Jar,很抱歉出现另一个“找不到或加载主类”问题 我是Java新手。我找了一会儿,但找不到原因 我的项目是用maven创建的一个非常简单的项目 mvn archetype:generate -DgroupId=mycompany -DartifactId=faker -DinteractiveMode=false xml(默认,不更改) 我使用jar命令构建jar文件 ~$ jar cvfm MyCompany.jar manifest.txt src/main/java/mycompany/App
maven
创建的一个非常简单的项目
mvn archetype:generate -DgroupId=mycompany -DartifactId=faker -DinteractiveMode=false
xml(默认,不更改)
我使用jar
命令构建jar文件
~$ jar cvfm MyCompany.jar manifest.txt src/main/java/mycompany/App.java
# added manifest
# adding: src/main/java/mycompany/App.java(in = 705) (out= 352)(deflated 50%)
manifest.txt
~$ cat manifest.txt
Main-Class: mycompany.App
# (has an empty new line here)
但每当我执行它时,它都会给我以下错误:
~$ java -jar MyCompany.jar
Error: Could not find or load main class mycompany.App
哪里错了
openjdk version "1.8.0_181"
Apache Maven 3.5.2
感谢@ohlec和@Kayaman,更具体地说,这里是解决问题的方法
# get App.class
~$ cd src/main/java/mycompany/ && javac App.java
# back to faker folder
~$ jar cvfm MyCompany.jar manifest.txt -C src/main/java mycompany/App.class
~$ java -jar MyCompany.jar
# Hello World!
您的jar应该有一个镜像包结构的目录结构;在您的例子中,包含了
src/main/java
,尽管这不是包前缀。使用-C
指定根目录:
jar cvfm MyCompany.jar manifest.txt -C target mycompany/App.class
编辑:另外,正如Kayaman指出的,您需要包括
.class
文件,而不是.java
文件。App.java
是源文件。您必须在jar之前编译它。而且,这可以用maven构建,因为maven已经被使用了。@PaulZepernick,明白了,谢谢!谢谢@ohlec,这很有效!另一个问题,你所说的“不是包前缀”是什么意思。在这种情况下,“mycompany”的包前缀是什么?如果maven这样做了,为什么要手工构建jar呢?只要说mvn-package
@mCY-No,src/main/java
就是存储源文件的地方mycompany
是您的软件包。
# get App.class
~$ cd src/main/java/mycompany/ && javac App.java
# back to faker folder
~$ jar cvfm MyCompany.jar manifest.txt -C src/main/java mycompany/App.class
~$ java -jar MyCompany.jar
# Hello World!
jar cvfm MyCompany.jar manifest.txt -C target mycompany/App.class