无法执行 jar 文件:“无主清单属性”

我已经安装了一个应用程序,当我尝试运行它(它是一个可执行的 jar)时,什么也没发生。当我从命令行使用以下命令运行它时:

java -jar“app.jar”

我收到以下消息:

在 “app.jar” 中没有主清单属性

通常,如果我自己创建了程序,则应该在清单文件中添加一个 main class 属性。但是在这种情况下,由于文件来自应用程序,因此我无法做到这一点。我还尝试提取 jar,以查看是否可以找到主类,但是有很多类,但它们中的任何一个都没有名称 “main”。由于该程序可以在其他系统上正常运行,因此必须有一种解决方法。

答案

Main-Class: com.mypackage.MyClass
<build>
  <plugins>
    <plugin>
      <!-- Build an executable JAR -->
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.1.0</version>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.mypackage.MyClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>
<jar destfile="build/main/checksites.jar">
  <fileset dir="build/main/classes"/>
  <zipfileset includes="**/*.class" src="lib/main/some.jar"/>
  <manifest>
    <attribute name="Main-Class" value="com.acme.checksites.Main"/>
  </manifest>
</jar>
plugins {
    id 'java'
}

jar {
    manifest {
        attributes(
                'Main-Class': 'com.mypackage.MyClass'
        )
    }
}
java -cp app.jar com.somepackage.SomeClass
<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <mainClass>com.package.MainClass</mainClass>
        </manifest>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
    </configuration>
  </plugin>
Main-Class: <packagename>.<classname>
Select Jar and next 

[ give it a name in the next window ] and next

and next again

and you'll see " Select the class of the application entry point".

Just pick a class and Eclipse will automatically build a cool MANIFEST.MF for you.
apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.package.app.Class'
    }
}
<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.0</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <mainClass>org.lazydevs.veetle.api.VeetleAPI</mainClass>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
 </plugins>
</build>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

使用 IntelliJ IDEA 创建 jar 时遇到此问题。看到这个讨论

为我解决的是重新创建 jar 工件,选择 “JAR”>“来自具有依赖性的模块”,但不接受 META-INF / MANIFEST.MF 的默认目录。将其从 -/ src / main / java 更改为 -/ src / main / resources。

否则,它将在 jar 中包含清单文件,但不应该在 -/ src / main / java 中包含清单文件。

java -cp yourJarName.jar your.package..your.MainClass

对我而言,所有答案都无济于事 - 我将清单文件放在正确的位置,其中包含 Main-Class 和所有内容。令我震惊的是:

警告:要从中创建清单的文本文件必须以换行符或回车符结尾。如果最后一行未以新行或回车结尾,则将无法正确解析。

来源 )。在清单的末尾添加换行符可以解决此问题。