Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行jar错误无法找到或加载主类_Java_Maven_Jar - Fatal编程技术网

Java 执行jar错误无法找到或加载主类

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

很抱歉出现另一个“找不到或加载主类”问题

我是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.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