运行 java jar - 没有主清单属性错误

Run java jar - no main manifest attribute error

我创建了简单的 java 程序(maven 和 pom ),当我 运行 使用 CMD 的一些命令时,它应该在给定路径下创建一个文件...我做 mvn clean install 成功完成, 现在我想从命令行使用这个创建的 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

这里可能缺少什么?哪个清单属性

错误不是来自我创建的 class

我创建了一些 META-INF/MANIFEST.MF 没有帮助,但可能是错误的

清单是 jar 中路径 META-INF/MANIFEST.MF 中的文件,它定义了诸如 classpath 和 运行 jar 的主要 class 等属性文件。

基本结构如下:

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

您可以通过添加 属性 Main-Class: classname.

来定义您的入口点

为了使用给定清单创建 jar 文件,您可以:

  1. 使用您的 IDE 将清单添加到它生成的 jar。
  2. 使用 jar cfm MyJar.jar Manifest.txt MyPackage/*.class 之类的命令手动创建具有给定清单和 classes 的 jar。
  3. 手动解压jar,添加manifest,再次压缩。压缩工具通常可以使用 drag/drop.

您可以找到有关 jar 清单文件的更多信息 here.

如果您使用的是 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>

在我的例子中,我使用的是 spring-boot 但我没有在我的 pom 中提到我的构建器所以我修复了它:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

您需要一个主 class 来执行您的应用程序。尝试以下操作。它对我有用。

如果您使用 Maven 构建工具,请将以下代码片段添加到您的 pom.xml 文件中。

 <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <build>
        <plugins>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.validator.App</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>

        </plugins>


    </build>

我遇到了同样的问题,通过添加这个插件解决了这个问题:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.somepackage.CLASSWITHMAINMETHODE</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>