我正在使用一个Java应用程序(不是项目中具有项目的应用程序,而是项目内部的应用程序;.java),编写一个简单的程序,它只有一个框架。这两个文件都是.java文件,因此我无法编写JAR所需的manifest。
MyApp.java像一个类一样开始,有包、导入和公共类MyApp
以及主函数,但它仍然是一个.java文件!如果需要,我是在JDeveloper 11g中编写的。
有什么办法可以从这些文件中创建一个JAR文件吗?
我正在使用一个Java应用程序(不是项目中具有项目的应用程序,而是项目内部的应用程序;.java),编写一个简单的程序,它只有一个框架。这两个文件都是.java文件,因此我无法编写JAR所需的manifest。
MyApp.java像一个类一样开始,有包、导入和公共类MyApp
以及主函数,但它仍然是一个.java文件!如果需要,我是在JDeveloper 11g中编写的。
有什么办法可以从这些文件中创建一个JAR文件吗?
打开命令提示符。
进入您拥有.java文件的目录
创建一个名为“build”的目录
从命令行运行Java编译
javac -d ./build *.java
如果没有错误,在构建目录中应该有你的类树
进入构建目录并执行
jar cvf YourJar.jar *
为了添加清单,请检查JAR命令行开关
jar cfe Main.jar Main *
(不过我有点困惑,我必须在输出文件名之后放置Main-Class名称。) - user5066707你必须移动到构建目录
。如果你尝试使用jar cvf YourJar.jar ./build/*
命令,你以后运行JAR文件时会遇到麻烦。 - DarkTrick使用命令行即可:
javac MyApp.java
jar -cf myJar.jar MyApp.class
当然,集成开发环境避免使用命令行终端。
.class
文件。所以命令应该是jar -cf myJar.jar myApp.class
。 - Navigatron好的,这是我想要找到的解决方案,但现在我在这里写出来:
首先创建与 .java 文件定义的包相对应的目录结构,如果是 my.super.application
,则创建目录 my
,在其中创建目录 super
,并在其中放置 .java 文件 App.java
然后从命令行执行:
javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java
jar -cvfe App.jar App my/app/
以上代码将创建应用程序及其相应的清单,指示应用程序为主类。
使用Java或jar命令行参数无法将所需的库包含在jar文件中。
您可以选择:
nbproject/build-impl.xml
的post-jar部分中插入规则以将库提取到jar中。请参见下文。<target name="-post-jar">
<!-- Empty placeholder for easier customization. -->
<!-- You can override this target in the ../build.xml file. -->
<jar jarfile="${dist.jar}" update="true">
<zipfileset src="${dist.jar}" includes="**/*.class"/>
<zipfileset src="${file.reference.iText-1.0.8.jar}" includes="**/*"/>
<zipfileset src="${file.reference.itextpdf-3.2.1.jar}" includes="**/*"/>
</jar>
</target>
在将库添加到Netbeans IDE后,可以在project.properties
文件中找到file.reference
名称。
通常您会想要指定一个清单,像这样:
jar -cvfm myJar.jar myManifest.txt myApp.class
命令为:"create verbose jarFilename manifestFilename",紧跟着要包含的文件。Verbose 意味着打印关于正在执行的操作的消息。
请注意,您提供的清单文件的名称可以是任何内容,因为jar
会自动重命名并将其放入JAR文件中的正确目录中。
这可以在IDE中直接完成,而无需使用终端。例如Netbeans。
$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class
这段代码将抓取当前目录下所有的 .java 文件(ls | grep .java
),并将它们编译成 .class 文件(xargs -I {} javac {}
),然后从之前编译好的类文件中创建 jar 文件(jar -cf myJar.jar *.class
)。
编译JAR文件的最简单方法可能是使用集成开发环境(IDE,即用于开发的用户友好软件)如Netbeans或Eclipse。这是面向初学者的。
您也可以使用命令行轻松完成所有操作。在执行类似以下命令之前,请确保您位于目标文件所在的同一目录中:
javac YourApp.java
jar -cf YourJar.jar YourApp.class
如果您有一个简单的主类(比如Count.class),并希望生成一个包含 MANIFEST 文件,其中该文件将此类指定为入口点的 jar 包,可以按照以下步骤操作:
jar cfe app.jar Count Count.class
来源:https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
JAR文件是Java应用程序的一种常见方式进行分发。它们是包含Java类、资源和元数据的归档文件。在运行时,Java虚拟机可以将JAR文件中的类加载到内存中,并让应用程序使用这些类。.jar
文件(库)包含在新的jar中? - parsecer