2015-09-16 346 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
相關問題