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