Java Can';t执行jar-file:";无主清单属性“;

Java Can';t执行jar-file:";无主清单属性“;,java,jar,manifest,main,Java,Jar,Manifest,Main,我已经安装了一个应用程序,当我尝试运行它(它是一个可执行的jar)时,什么都没有发生。当我使用以下命令行运行它时: java-jar“app.jar” 我得到以下信息: “app.jar”中没有主清单属性 通常,如果我自己创建了这个程序,我会在清单文件中添加一个主类属性。但在本例中,由于文件来自应用程序,因此我不能这样做。我还尝试提取jar,看看是否可以找到主类,但是有太多的类,它们的名称中都没有“main”这个词。必须有办法解决这个问题,因为程序在其他系统上运行良好。如果jar没有跟随,它就不

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

java-jar“app.jar”

我得到以下信息:

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


通常,如果我自己创建了这个程序,我会在清单文件中添加一个主类属性。但在本例中,由于文件来自应用程序,因此我不能这样做。我还尝试提取jar,看看是否可以找到主类,但是有太多的类,它们的名称中都没有“main”这个词。必须有办法解决这个问题,因为程序在其他系统上运行良好。

如果jar没有跟随,它就不是可执行的jar。

应该是
java-jar-app.jar
而不是
java-jar“app”

-jar
选项仅在jar文件是可执行的jar文件时有效,这意味着它必须有一个包含
主类
属性的清单文件。请参阅以了解如何创建可执行JAR

如果它不是一个可执行的JAR,那么您需要使用以下内容运行程序:

java -cp app.jar com.somepackage.SomeClass

其中
com.somepackage.SomeClass
是包含运行程序的
main
方法的类。(该类是什么取决于程序,无法从您提供的信息中分辨出来)。

首先,看到您运行
java-jar“app”
而不是
java-jar app.jar

第二,要使jar可执行。。。您需要jar一个名为META-INF/MANIFEST.MF的文件

文件本身应该(至少)有一行:

Main-Class: com.mypackage.MyClass
其中
com.mypackage.MyClass
是包含公共静态void main(String[]args)入口点的类

请注意,有几种方法可以通过CLI、Maven、Ant或Gradle实现这一点:

对于CLI,将执行以下命令:(tks@)


任何可执行jar文件都应该通过单击或使用命令提示符运行,如java-jar app.jar(使用“if-path of jar contains space”-即java-jar“C:\folder name\app.jar”)。如果您的可执行jar没有运行,这意味着它没有正确创建

为了更好地理解,请解压缩jar文件(或者使用任何工具查看,对于windows 7-Zip来说都是不错的),并检查/META-INF/MANIFEST.MF下的文件。如果你发现任何类似的条目

Main类:your.package.name.ClaaswithMain-那么就可以了,否则就必须提供它


注意在MANIFEST.MF文件中附加主类条目,检查保存它的位置

对于maven来说,这就是解决它的原因(对于我来说,对于GitHub上的Veetle代码库):


org.apache.maven.plugins
maven阴影插件
2
包裹
阴凉处
org.lazydevs.veetle.api.VeetleAPI

干杯…

尝试此命令以包括jar:

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

您可能没有正确创建jar文件:

示例:jar创建中缺少选项m

以下工作:

jar -cvfm MyJar.jar Manifest.txt *.class

您可以简单地按照此步骤操作 使用创建jar文件

 jar -cfm jarfile-name manifest-filename Class-file name
在运行jar文件时,简单地如下运行

 java -cp jarfile-name main-classname

这是因为Java在MANIFEST.MF文件中找不到Main属性。 Main属性是告诉java应该使用哪个类作为应用程序的入口点所必需的。在jar文件中,MANIFEST.MF文件位于META-INF文件夹中。想知道如何查看jar文件中的内容吗?用WinRAR打开jar文件

MANIFEST.MF中的主属性如下所示:

Main-Class: <packagename>.<classname>
apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.package.app.Class'
    }
}
Main-Class: <classname>

或者,您可以使用maven assembly插件,如下例所示:

<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> 

maven汇编插件
包裹
单一的
真的
com.package.MainClass
带有依赖项的jar

在本例中,第节中指定的所有依赖项jar将自动包含在您的单个jar中。请注意,带有依赖项的jar应该按字面意思放,而不是用您想要包含的jar文件名替换。

对我来说,没有一个答案真正有用-我将清单文件放在正确的位置,包含主类和所有内容。让我绊倒的是:

警告:从中创建清单的文本文件必须 以新行或回车结束。最后一行不会被删除 如果未以新行或回车结束,则正确解析


()。在清单末尾添加一个新行修复了它。

对于我来说,发生这个错误的原因很简单,因为我忘记告诉Eclipse我想要一个可运行的jar文件,而不是一个简单的库jar文件。因此,当您在Eclipse中创建jar文件时,请确保单击右单选按钮

我遇到了相同的问题,现在已经解决了:) 只需按照以下步骤操作,错误可能是针对任何情况的,但以下步骤会使过程更加顺利。我花了很多时间来找到解决办法

1.尝试重新启动Eclipse(如果您使用Eclipse构建JAR文件) -->实际上,这有助于我正确导出JAR文件

2.eclipse重新启动后,尝试查看eclipse是否能够通过Java项目-->右键单击-->运行方式-->运行配置-->主-->单击搜索按钮来识别主类/方法,以查看eclipse是否能够在JAR文件中查找主类。 -->这是为了验证JAR文件将具有主类的入口点

  • 在此之后,将Java动态项目导出为“Runnable JAR”文件,而不是JAR文件

  • 在Java启动配置中,选择主类

  • 导出jar文件后,使用be
    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.
    
    <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> 
    
    apply plugin: 'java'
    
    jar {
        manifest {
            attributes 'Main-Class': 'com.package.app.Class'
        }
    }
    
    jar cfve app.jar TheNameOfClassWithMainMethod *.class
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
    </parent>
    
    <properties>
        <java.version>1.8</java.version>
    </properties>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    
    package testpackage;
    
    public class Test
    {
        ...
    }
    
    javac -d . Test.java
    
    jar cvfeP test.jar testpackage.Test -C . testpackage/
    
    META-INF
    | MANIFEST.MF
    testpackage
    | Test.class
    
    Manifest-Version: 1.0
    Created-By: <JDK Version> (Oracle Corporation)
    Main-Class: testpackage.Test
    
    java -jar test.jar
    
    // MANIFEST.MF
    Manifest-Version: 1.0
    Created-By: 1.8.0_91 (Oracle Corporation)
    Main-Class: HelloWorldSwing
    
    // run
    ~ java -jar HelloWorldSwing.jar
    no main manifest attribute, in HelloWorldSwing.jar
    
    Manifest-Version: 1.0
    Main-Class: HelloWorldSwing
    Created-By: 1.8.0_91 (Oracle Corporation)
    
    //this run swing normally
    
    jar tf /path/to/myjar.jar | more
    
    META-INF/
    META-INF/MANIFEST.MF
    somepath/
    somepath/App.class
    META-INF/maven/
    ...
    
    java -cp /path/to/myjar.jar somepath/App
    
        <manifest>
            <mainClass>mypackage.MyClass</mainClass>
        </manifest>
    
    apply plugin: 'java'
    
    jar {
        manifest {
            attributes 'Main-Class': 'com.company.project.MainClass'
        }
    }
    
    Main-Class: <packagename>.<classname>
    
    Main-Class: <classname>
    
    Start-Class: com.myco.eventlogging.MyService
    Spring-Boot-Classes: BOOT-INF/classes/
    Spring-Boot-Lib: BOOT-INF/lib/
    Spring-Boot-Version: 1.4.0.RELEASE
    Created-By: Apache Maven 3.3.9
    Build-Jdk: 1.8.0_131
    Main-Class: org.springframework.boot.loader.JarLauncher
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.2.0</version>
        <configuration>
            <archive>
                <manifestFile> Your path like: src/main/resources/META-INF/MANIFEST.MF </manifestFile>
                <index>true</index>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
            </archive>
        </configuration>
    </plugin>
    
    <plugins>
        <plugin>
    
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
    
            <archive>
    
                <index>true</index>
    
                <manifest>
                    <addClasspath>true</addClasspath>
                    <mainClass> yourpacket.yourmainclass (for exmaple info.data.MainClass)</mainClass>
                </manifest>
                <manifestEntries>
                    <mode>development</mode>
                    <url>${project.url}</url>
                </manifestEntries>
            </archive>
        </configuration>
    </plugin>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
    <build>
      <pluginManagement>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            ...
            ...
            ...
      </pluginManagement>
    </build>