一尘不染

Java jar的清单属性

java

在您的所有帮助下,我得以用Java完成我的第一个项目。现在,我想创建一个jar并运行jar中的应用程序(Java项目-
这是一个普通的控制台应用程序,该应用程序依赖于另一个项目(控制台应用程序))。

我通过右键单击创建了一个带有Eclipse的罐子-导出-创建了一个罐子。当我尝试从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,但是这次它说没有main方法,而我在类中有main方法

请有人请说明创建清单的一个明确步骤(如果您向我展示我们拥有清单文件的地方的文件夹结构,这对我很有帮助)


阅读 255

收藏
2020-12-03

共1个答案

一尘不染

假设您具有以下目录结构:

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

这将Main.classbin目录中创建文件。要将其打包为* .jar文件,您可以:1)使用二进制文件创建jar,并在cmd中指定Main
class 2)创建Manifes并将其嵌入到jar中(我将重点介绍这一点)

您应该在其META-INFsrc并在其中创建MANIFEST.mf文件的目录中创建目录

您的清单应如下所示:

Manifest-Version: 1.0
Created-By: <Your info>
Main-Class: com.example.Main

请记住在清单末尾添加空行!!

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

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

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

这将创建新的jar MyJavaProject.jar并使用您的清单

如果您的项目依赖于外部类或jar,则在编译时将它们添加到类路径中(-cp可选),并在其中添加另一行Manifest

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

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

有关清单的更多信息,请参见:docs

PS:使用罐子,从cmd行进行放大似乎很丑陋,但是它可以教您一些类似ava的概念。如果要跳过它,请考虑使用Apache
Maven
Apache Ant

2020-12-03