我正在使用具有单个框架的 Java 应用程序(不是具有项目的应用程序,而是项目内的应用程序;.java)编写一个简单的程序。这两个文件都是 .java,所以我无法编写 JAR 所需的 manifest。
MyApp.java像一个带包的类一样开始,然后导入公共类
MyApp
并具有主要功能,但它仍然是.java文件!如果有帮助的话,我正在 JDeveloper 11g 中编写它。
有什么想法如何从这些文件制作 JAR 吗?
打开命令提示符。
转到 .java 文件所在的目录
创建目录build
从命令行运行java编译
javac -d ./build *.java
如果没有错误,在构建目录中你应该有你的类树
移动到构建目录并执行
jar cvf YourJar.jar *
用于添加清单检查 jar 命令行开关
只需使用命令行:
javac MyApp.java
jar -cf myJar.jar MyApp.class
某些 IDE 会避免使用命令行终端
好吧,这是我想要找到的解决方案,但我在这里写下它:
首先创建与.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
注意上面将包含多个库,如果在 Windows 下使用“,”分隔多个文件,否则在 GNU/Linux 下使用“:” 创建 jar 文件
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 后,可在
file.reference
文件中找到 project.properties
名称。
通常您会想要指定一个清单,如下所示:
jar -cvfm myJar.jar myManifest.txt myApp.class
其中内容为:“create verbose jarFilename manifestFilename”,后跟您要包含的文件。详细意味着打印有关其正在执行的操作的消息。
请注意,您提供的清单文件的名称可以是任何名称,因为
jar
会自动重命名它并将其放入 jar 文件中的正确目录中。
这可以在没有终端的情况下直接从 IDE 完成。例如,Netbeans。
这是另一种奇特的方法:
$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class
这将从当前目录中获取所有 .java 文件 (
ls | grep .java
) 并将它们编译为 .class (xargs -I {} javac {}
),然后从之前编译的类 (jar -cf myJar.jar *.class
) 创建 jar 文件。
从 Java 代码编译 JAR 的最适合初学者的方法可能是使用 IDE(集成开发环境;本质上只是用户友好的开发软件),例如 Netbeans 或 Eclipse。
您始终可以使用命令行轻松完成这一切。在执行如下命令之前,请确保您与目标文件位于同一目录中:
javac YourApp.java
jar -cf YourJar.jar YourApp.class
...将“YourApp”和“YourJar”分别更改为文件的正确名称。
如果你有一个简单的主类(比如说 Count.class),并且想要一个带有 MANIFEST 文件的 jar,该文件指向该类作为入口点,你可以这样做:
jar cfe app.jar Count Count.class
来源:https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
如果java文件导入了另一个像lombok这样的依赖项,可以这样做
javac -d ./build -cp .:lombok-1.18.34.jar *.java
cd build
jar cvf d-java-17.jar *
然后在构建目录中,您将有一个名为 d-java-17.jar 的 jar,因为它是由 java17 打包的。