我已经安装了一个应用程序,当我试图运行它(它是一个可执行的jar)什么都没有发生。当我从命令行运行它时:
Java -jar "app.jar"
我得到了以下信息:
在“app.jar”中没有主清单属性
通常,如果我自己创建了这个程序,我就会向清单文件添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取jar,看看是否能找到主类,但有很多类,没有一个在它的名称中有“main”这个词。必须有一种方法来修复这个问题,因为程序在其他系统上运行良好。
我已经安装了一个应用程序,当我试图运行它(它是一个可执行的jar)什么都没有发生。当我从命令行运行它时:
Java -jar "app.jar"
我得到了以下信息:
在“app.jar”中没有主清单属性
通常,如果我自己创建了这个程序,我就会向清单文件添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取jar,看看是否能找到主类,但有很多类,没有一个在它的名称中有“main”这个词。必须有一种方法来修复这个问题,因为程序在其他系统上运行良好。
当前回答
大多数的解决方案对我来说都不奏效,但我的教练帮助了我 我想在这里分享他的解决方案 我使用kali Linux终端,但应该在所有debian都很好
javac *.java
nano MANIFEST.MF
在文件类型中
主类:主要 或者不管你的主文件名是什么(如果存在包名,请确保添加包名)
jar -cvmf MANIFEST.MF new.jar *.class
现在运行文件use
java -jar new.jar
或者你可以去文件的属性中检查
允许文件作为程序执行 双击它
这对我有帮助,而上面的大多数答案都没有
其他回答
这应该是java -jar app.jar而不是java -jar "app"。
只有当JAR文件是可执行JAR文件时,-jar选项才有效,这意味着它必须有一个带有Main-Class属性的清单文件。参见在JAR文件中打包程序以了解如何创建可执行JAR。
如果它不是一个可执行的JAR,那么你需要像这样运行程序:
java -cp app.jar com.somepackage.SomeClass
其中com.somepackage.SomeClass是包含运行程序的主方法的类。(这个类是什么取决于程序,不可能从您提供的信息中判断出来)。
我也有同样的问题。这里提到的许多解决方案并没有提供完整的内容,因此我将尝试向您概述如何从命令行打包jar文件。
如果您想在包中包含.class文件,请将包添加在.java. xml文件的开头。 Test.java 包testpackage; 公共类测验 { ... } 使用包名给出的结构来编译你的.class文件的代码: Javac -d。Test.java d。使编译器创建所需的目录结构。 在打包.jar文件时,您需要指示jar例程如何打包它。这里我们使用选项集cvfeP。这是为了保持包结构(选项P),指定入口点,以便清单文件包含有意义的信息(选项e)。选项f允许您指定文件名,选项c创建一个存档,选项v将输出设置为详细。这里需要注意的重要事项是P和e。 然后是我们想要的jar的名称test.jar。 然后是入口点。 然后是-C。<packagename>/从该文件夹中获取类文件,并保留文件夹结构。 jar cvfeP test.jar testpackage. jar测试-C。testpackage / 检查压缩程序中的.jar文件。它应该具有以下结构 test.jar meta - inf |清单。曼氏金融 testpackage | Test.class 清单。MF应该包含以下内容 Manifest-Version: 1.0 创建对象:JDK版本> (Oracle Corporation) 主类:testpackage。测试 如果你手动编辑你的清单,一定要保持换行符在最后,否则java不会识别它。 执行你的.jar文件 Java -jar test.jar
(第一个帖子-所以可能不干净)
这是我对OS X 11.6的修复,基于maven的Netbeans 8.2程序。到目前为止,我的应用程序是100%的Netbeans -没有调整(只是一些shell逃脱为不可能!)。
在这里和其他地方尝试了几乎所有的答案都无济于事之后,我回到了“使用有用的东西”的艺术上。
上面的答案(olivier-refalo,谢谢)看起来是正确的起点,但并没有帮助。
看看其他成功的项目,我注意到清单行中有一些微小的差异:
addClasspath, classpathPrefix不存在(已删除) mainClass缺少了“com”。(使用NB ->项目 属性->运行->主类->浏览指定)
不知道为什么(我只有3个月的java)或如何,但只能说这是有效的。
下面是修改后的manifest块:
<manifest>
<mainClass>mypackage.MyClass</mainClass>
</manifest>
对于maven,这就是解决它的方法(对我来说,对于GitHub上的vetle代码库):
<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>
欢呼声……
MAVEN的问题在于它试图包括第一个MANIFEST。MF文件从第一个库从依赖而不是我们自己的清单。Mf当你使用神器的时候!
将jar.jar重命名为jar.zip 打开清单。MF文件从META-INF\MANIFEST。曼氏金融 复制真实的清单。MAVEN已经在你的项目中生成了MF 其中包括: Manifest-Version: 1.0 主类:yourpacket。你的主类(例如info.data.MainClass) 替换MANIFEST的内容。你罐子里的MF。 将jar.zip重命名为jar.jar。 现在java -jar yourjar.jar工作得很完美。
OR!
简单地创建您自己的MANIFEST。MF和:
<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>
但是如果您使用maven面板(或maven命令行),您可以强制它生成自己的清单并将其包含到JAR文件中。
将以下代码添加到you pom.xml的构建部分: <插件> <插件> < groupId > org.apache.maven.plugins < / groupId > < artifactId > maven-assembly-plugin < / artifactId > <版本> 3.2.0 > < /版本 执行< > 执行< > <阶段>包> < /阶段 <目标> <目标>单> < /目标 > < /目标 执行< / > > < /执行 < >配置 < descriptorRefs > < descriptorRef > jar-with-dependencies < / descriptorRef > < / descriptorRefs > <文件> 真正<指数> < /指数> <清单> 真正< addClasspath > < / addClasspath > < mainClass > yourpacket。yourmainclass(例如info.data.MainClass)</mainClass> . /mainClass < /清单> < manifestEntries > < >发展模式> < /模式 < url > $ {project.url} < / url > < / manifestEntries > < / >存档 < /配置> < /插件> 打开MAVEN面板(在Intellij中)并执行“Install”。它将生成MANIFEST文件,并将包含所有依赖项的JAR文件属性编译到“Target”文件夹中。它还将被安装到本地maven存储库中。