我正在使用一些 apache HttpClient jars,所以我将它们放在我项目的 lib 目录中,当 Netbeans 编译项目时,它会复制 lib 并将项目 jar 生成到 dist 目录中,但是当我使用 webstart 运行我的项目时,我需要将项目jar和lib复制到tomcat的ROOT目录下,不知道Netbeans能不能生成一个项目jar包含lib目录下的所有jar,这样我就不用把项目jar和lib目录复制到tomcat的ROOT目录下了。Netbeans 可以做到这一点吗?
5 回答
将每个依赖库 (*.jar) 打包到一个 myProject.jar 中真的很容易。
只需按照这些步骤,您最终会将每个依赖库打包到单个 jar 中。如果您使用的是 NetBeans,那么您可以完全按照,否则您需要在项目文件中找到您的build.xml文件。
按照以下步骤编辑build.xml
1) 单击Files tab
NetBeans 中项目面板左侧的 。
2)双击build.xml
文件并在行前添加这些</project>
行
<target name="package-for-store" depends="jar">
<property name="store.jar.name" value="myProject"/>
<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
</target>
3)根据您的项目名称更改value
代码的第二行
<property name="store.jar.name" value="myProject"/> //<---Just value not name
4) 保存并右键单击build.xml并选择Run Target和Other Targets最后单击Package-for-store
5) 到此,你就完成了。现在你可以像dist
文件夹一样去检查,会有一个store
文件夹包含你最终的完整 jar,包括你所有的依赖库。现在,每当您想更改/添加更多库时,只需按照第 4 步操作即可。
步骤 4 的图片
好的,在以下站点找到了答案:http: //arunasujith.blogspot.com/2011/08/how-to-build-fat-jar-using-netbeans.html
Robert Eckstein 描述了这个问题的解决方案。您只需将以下代码粘贴到build.xml
. 这些库都是自动找到的。
开始了:
<target name="-post-jar">
<!-- Change the value to the name of the final jar without .jar -->
<property name="store.jar.name" value="MyJarName"/>
<!-- don't edit below this line -->
<property name="store.dir" value="dist"/>
<property name="temp.dir" value="temp"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${temp.dir}"/>
<mkdir dir="${temp.dir}"/>
<jar destfile="${temp.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<delete dir="${store.dir}"/>
<zip destfile="${store.jar}">
<zipfileset src="${temp.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete dir="${temp.dir}"/>
</target>
转到您的 build.xml,并在最后的结束项目标记之前添加代码。
现在按照注释更改第一个属性字段的值
单击 Clean & Build,您的 jar 将在 dist 文件夹中
好的,这就是我的解决方案。我的程序在 Netbeans 上编译和运行时也遇到了问题,但是当我尝试时它失败了java -jar MyJarFile.jar
。现在,我并不完全了解 Maven,我认为这就是为什么让 Netbeans 8.0.2 无法将我的 jar 文件包含在库中以将它们放入 jar 文件中的原因。我正在考虑如何在 Eclipse 中使用没有 Maven 的 jar 文件。
编译所有依赖项和插件的是 Maven,而不是 Netbeans。(如果您可以让 Netbeans 执行此操作,请告诉我们如何操作。)
[已解决 - 适用于 Linux] 通过打开终端。
然后
cd /MyRootDirectoryForMyProject
下一个
mvn org.apache.maven.plugins:maven-compiler-plugin:compile
下一个
mvn install
这将在目标目录中创建 jar 文件。
MyJarFile-1.0-jar-with-dependencies.jar
现在
cd target
(您可能需要运行:chmod +x MyJarFile-1.0-jar-with-dependencies.jar)最后
java -jar MyJarFile-1.0-jar-with-dependencies.jar
请参见
https://cwiki.apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException
- 检查 MainClass 主文件是否更新为属性>运行中的主文件
- 在项目标签关闭之前使用以下代码更新 Build.xml
<!-- Change the value to the name of the final jar without .jar -->
<property name="store.jar.name" value="MyJarName"/>
<!-- don't edit below this line -->
<property name="store.dir" value="dist"/>
<property name="temp.dir" value="temp"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${temp.dir}"/>
<mkdir dir="${temp.dir}"/>
<jar destfile="${temp.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<delete dir="${store.dir}"/>
<zip destfile="${store.jar}">
<zipfileset src="${temp.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete dir="${temp.dir}"/>
- 属性>包装>全部勾选
- 清洁和建造
- 上传到服务器。