2017-08-27 1014 views
5

我創建了簡單的java程序(maven with pom),當我用CMD運行一些命令時,它應該在給定路徑下創建一個文件...我做了mvn clean install 成功完成, 現在我想用這個創建的jar命令行類似follwoing:運行java jar - 沒有主清單屬性錯誤

java -jar "/Users/i012/IdeaProjects/myproj/target/test.rts-1.0-SNAPSHOT.jar" path2genfile2create 

哪些應該運行我的程序(這個我第一次嘗試這樣的事情...)

但錯誤,我得到的是:

no main manifest attribute, in /Users/i012/IdeaProjects/myproj/target/test.rts-1.0-SNAPSHOT.jar 

這裏可能會丟失什麼?其中清單屬性

該錯誤不從我已經創建類的到來......

我已經創造了一些META-INF/MANIFEST.MF沒有幫助,但也許它錯誤

回答

6

如果您使用的是Maven組件插件,或者您的IDE工具是,您需要一個mainClass元素。這是我用:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <archive> 
     <manifest> 
      <mainClass>com.foo.MyMainClass</mainClass> 
     </manifest> 
     </archive> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    <executions> 
     <execution> 
     <id>make-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
+0

我該如何運行它? –

+0

如果myprojet是像myproj-> src-> main-> java> myclass構建的,那麼我應該在mainClass attr中放置什麼? –

+0

@JennyHilton包含要運行的'main()'方法的類的FQN類名,例如'Main-class:my.package.MainClass'。 – EJP

3

清單是一個文件在jar中的META-INF/MANIFEST.MF路徑中,它定義了類路徑和用於運行jar文件的主類等屬性。

的基本結構是這樣的:

Manifest-Version: 1.0 
Created-By: 1.7.0_06 (Oracle Corporation) 

您可以通過添加屬性Main-Class: classname定義切入點。

爲了給定的清單,你可以創建你的jar文件:

  1. 用你的IDE指向清單添加到它產生的罐子。
  2. 使用像jar cfm MyJar.jar Manifest.txt MyPackage/*.class這樣的命令手動創建具有給定清單和類的jar。
  3. 手動解壓縮jar,添加清單並再次壓縮。壓縮工具通常可以通過拖放來完成。

您可以瞭解更多的jar manifest文件here

+0

如何添加它intellij?也許我在錯誤的位置創建了它... –

+0

我應該手動執行它嗎? –

+0

在您的項目設置 - >工件中,單擊添加,然後選擇主類。確保清單的目錄已填充。點擊確定。在頁面上檢查make_複選框上的_Build,然後按OK。現在重建你的項目。 – alirabiee

0
在我的情況

,我是用彈簧啓動,但我並沒有在我的POM提到我的建設者,所以我通過固定它:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 
相關問題