2017-08-27 1016 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> 
相关问题