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

Posted

技术标签:

【中文标题】运行 java jar - 没有主清单属性错误【英文标题】:Run java jar - no main manifest attribute error 【发布时间】:2018-02-04 17:27:30 【问题描述】:

我创建了简单的 java 程序(带有 pom 的 maven),当我使用 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

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

错误不是来自我创建的类 ...

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

如何运行它? 如果 myprojet 像 myproj->src->main->java>myclass 一样构建,我应该在 mainClass attr 中添加什么? @JennyHilton 包含您要运行的 main() 方法的类的 FQN 类名称,例如 Main-class: my.package.MainClass 我在这个上下文中的项目结构是:myproj-&gt;src-&gt;main-&gt;java&gt;myclass 完成 1+ 它有效...当我只使用 myclass 时,1. 为什么? 2. 使用 maven-assembly-plugin 是最佳实践吗?谢谢!【参考方案2】:

在我的情况下,我使用的是 spring-boot,但我没有在我的 pom 中提到我的构建器,所以我通过以下方式修复它:

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

【讨论】:

【参考方案3】:

清单是 jar 中 META-INF/MANIFEST.MF 路径中的一个文件,它定义了类路径和运行 jar 文件的主类等属性。

基本结构如下:

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

您可以通过添加属性Main-Class: classname 来定义您的入口点。

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

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

您可以了解有关 jar 清单文件的更多信息here

【讨论】:

在您的项目设置 -> 工件中,单击添加,然后选择主类。确保清单的目录已填满。单击确定。在页面上选中 Build on make 复选框,然后按 OK。现在重建你的项目。 我没有找到项目设置你能说一下在哪里 文件 -> 项目结构 我没有找到 make 复选框,但我做了这些步骤,它在 src->main->java 下创建了 META-INF,现在我做了 mvn clean install,我得到了同样的错误,我想念吗还有什么? 提取你试图执行的jar,看看它的结构是否正确。【参考方案4】:

您需要一个主类来执行您的应用程序。试试下面的。它对我有用。

如果你使用的是 maven 构建工具,请将以下代码 sn-p 添加到你的 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>

【讨论】:

【参考方案5】:

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

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

【讨论】:

以上是关于运行 java jar - 没有主清单属性错误的主要内容,如果未能解决你的问题,请参考以下文章

在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性

java运行jar命令提示没有主清单属性

java运行jar命令提示没有主清单属性和找不到主类

jar命令成功完成 java -jar 命令却提示“没有主清单属性”!

应用程序构建成功但出现错误:运行映像时出现“没有主清单属性,在 app.jar 中”

jar命令成功完成 java -jar 命令却提示“没有主清单属性”!