2015-09-16 229 views
-1

下面是我的示例类文件:Maven项目执行命令

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很重要?

回答

1

错误是有点误导。您的java命令不正确,因为您未指定Something-1.0.SNAPSHOT.jar意在成为-cp选项的一部分,但java正在将其解释为

那怎么java行为

The java command starts a Java application. It does this by starting a Java runtime environment, loading a specified class, and calling that class's main method.

如果.jar文件包含在清单中包含Main-Class头中指定的entry point,那么你就可以简单地运行

java -jar Something-1.0.SNAPSHOT.jar 
0

让我试着回答你的问题。

Why should the groupId and app name matter when I am supplying the entire 'jar' file ?

让划分问题成更小的部分 -

What is group id? - 该项目组的ID。

What is artifactId? - 工件(项目)和偏离课程版本的ID是默认工件名称的一部分。

在jvm下运行java程序时,不会出现如何构建jar的效果,例如它是由maven或gradle构建过程甚至命令行生成的。

重要的事情是jar文件和入口点或主要驻留的类。


这可能是出于这个问题的范围,但我觉得有关。

要从jar文件运行java程序,你可以明确地提到像上面那样。你也可以通过添加清单文件,它定义可执行文件的入口点创建可执行的JAR文件 -

主类:org.foo.tutorial.APP

  1. How to create executable jar?
  2. 也Maven的maven-assembly-plugin有助于打包可执行jar。 help
相关问题