以下是我的示例类文件:
package org.foo.tutorial;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
为了执行项目(maven框架),我们运行:
>java -cp Something-1.0.SNAPSHOT.jar org.foo.tutorial.APP
以上命令运行正常,并为我提供输出' HELLO WORLD'。
但是,如果我省略上述命令中的第三个参数(org.foo.tutorial.APP),我会收到以下错误:
Error: Could not find or load main class target.MavenTutorialApp-1.0-SNAPSHOT.jar
我的问题是:
当我提供整个' jar时,为什么groupId和app name会很重要?文件?
答案 0 :(得分:1)
错误有点误导。您的java
命令不正确,因为您未指定类。 Something-1.0.SNAPSHOT.jar
是-cp
选项的一部分,但java
将其解释为类。
这就是java
表现的方式
java
命令启动Java应用程序。这是通过开始一个 Java运行时环境,加载指定的类,并调用它 班级的主要方法。
如果您的.jar
文件包含清单中Main-Class
标题指定的entry point,那么您只需运行
java -jar Something-1.0.SNAPSHOT.jar
答案 1 :(得分:0)
让我试着回答你的问题。
为什么在我提供时,groupId和app名称很重要 整个'jar'文件?
让我们把问题分成小部分 -
What is group id?
- 项目组的ID。
What is artifactId?
- 工件(项目)和非课程版本的ID是默认工件名称的一部分。
在jvm下运行java程序时,没有像你如何构建jar那样的效果,例如它是由maven或gradle构建过程甚至是命令行生成的。
重要的事情是jar文件和入口点或主要驻留的类。
这可能超出了这个问题的范围,但我感到很有用。
要从jar文件运行java程序,您可以像上面一样明确提到。您还可以通过添加清单文件来创建可执行jar文件,在该文件中定义可执行文件的入口点 -
Main-Class:org.foo.tutorial.APP
maven-assembly-plugin
也有助于打包可执行jar。
help