【问题标题】:Run java jar - no main manifest attribute error运行 java jar - 没有主清单属性错误
【发布时间】: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 没有帮助,但可能是错误的

【问题讨论】:

    标签: java maven intellij-idea pom.xml


    【解决方案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 文件,您可以:

      1. 使用您的 IDE 将清单添加到它生成的 jar 中。
      2. 使用jar cfm MyJar.jar Manifest.txt MyPackage/*.class 之类的命令手动创建具有给定清单和类的 jar。
      3. 手动解压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>
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-01
          • 1970-01-01
          • 2018-03-23
          • 2021-05-29
          • 1970-01-01
          • 2021-07-14
          • 2018-02-10
          相关资源
          最近更新 更多