java jar的清单属性

在你的帮助下,我能够用java完成我的第一个项目。 现在我想创建一个jar并运行应用程序(Java项目 – 它是一个普通的控制台应用程序,它有另一个项目(控制台应用程序)作为依赖)来自jar。

我通过右键单击创建了一个带有eclipse的jar – export – 创建了一个jar。 当我尝试从我的cmd运行这个jar时,我有一个错误(下面是我正在设置的错误)

no main manifest attribute, in AAA.jar 

我用Google搜索了错误 – 大多数都是创建清单文件。 我在项目中创建了一个类似于src级别的清单文件,如下所示

 Manifest-Version: 1.0 Main-Class: com.Pacakename.mainclass Class-Path: log4j-1.2.16.jar db2jcc.jar db2jcc_license_cu.jar 

然后J尝试再次运行jar,但这次它没有说主流方法我在课堂上有一个主方法

请有人请说明创建清单的明确步骤(如果你向我展示我们有Manifest文件的地方的文件夹结构,那真的很有用)

让我们假设您有以下目录结构:

 MyJavaProject |-src |- com |- example |- Main.java 

要在cmd行中编译此类项目(无外部依赖项),您需要调用命令

 $ cd MyJavaProject $ mkdir bin //to separate *.class file from source files $ javac -d bin src\com\example\Main.java 

这将在bin目录中创建Main.class文件。 要将它打包到* .jar文件,您可以:1)创建带有二进制文件的jar并在cmd中指定Main类2)创建Manifes并将其嵌入jar(我将重点关注这个)

您应该在src下创建META-INF目录,并在其中创建MANIFEST.mf文件

您的清单应如下所示:

 Manifest-Version: 1.0 Created-By:  Main-Class: com.example.Main 

记得在Manifest上添加空行!

在这种情况下,您可以指定Manifest-Version属性, Created-By属性以及要在Main-Class属性中运行的主类的完全限定名称

要使用此Manifest文件和二进制文件创建Jar,请调用命令

 $ cd bin $ jar cfm MyJavaProject.jar ..\src\META-INF\MANIFEST.MF . 

这将创建一个名为MyJavaProject.jar新jar并使用你的清单

如果你的项目取决于外部类或jar,在编译时将它们添加到类路径中( -cp选项)并在Manifest添加另一行

 ClassPath: path/to/dependent/jars/jar.jar 

重新编译它并创建新的jar并享受你的Java任务:)

有关Manifest的更多信息,请参阅: docs

PS:使用jar子,cmd线上的amnifest可能看起来很难看,但它可以教你一些类似ava的概念。 如果您想跳过它,请考虑使用Apache Maven或Apache Ant

如果您正在使用maven,我可以建议您使用shade插件生成带有所有依赖项(和manifest :-))的可运行jar。

将其包含在您的pom.xml中

  ...    org.apache.maven.plugins maven-shade-plugin 2.1   package  shade      org.sonatype.haven.HavenCli         ...  

然后执行mvn clean package shade:shade来构建一个jar,你可以使用java -jar jarfilename.jar从命令行运行java -jar jarfilename.jar

如果你正在使用eclipse,你可以使用“导出” – > Runnable jar来实现你的目标。 在这种情况下,您应该为项目提供有效的运行配置,因为eclipse将此运行配置用作runnable jar的一种蓝图。

在这种情况下,eclipse将为您构建清单。