我正在使用一些apache HttpClient jar,所以我把它们放在我的项目的lib目录中,当Netbeans编译项目时,它复制lib并生成一个项目jar到dist目录,但当我用webstart运行我的项目时,我需要将项目jar和lib复制到tomcat的ROOT目录中,我想知道Netbeans是否可以生成包含lib目录中所有jar的项目jar,所以我不必将项目jar和lib目录复制到tomcat中ROOT目录。 Netbeans能做到吗?
答案 0 :(得分:71)
将每个依赖库(* .jar)打包成一个单独的myProject.jar非常容易。
只需按照这些步骤操作,您最终将每个依赖库打包到单个jar中。如果您使用的是NetBeans,那么您可以完全遵循,或者您需要在项目文件中找到 build.xml 文件。
按照以下步骤修改 build.xml
1)单击NetBeans项目面板左侧的Files tab
。
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 ,然后选择运行目标,然后选择其他目标,最后点击包换存储强>
5)在这里你完成了。现在您可以像dist
文件夹一样检查,会有一个store
文件夹,其中包含您的最终完整jar,包括所有依赖库。现在,无论何时想要更改/添加更多库,只需按照步骤4进行操作。
第4步的图片
答案 1 :(得分:11)
答案 2 :(得分:6)
Robert Eckstein describes a solution这个问题。您只需将以下代码粘贴到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,最后在结束项目标记之前添加代码。
现在将第一个属性字段的值更改为注释
点击清洁&amp;构建,你的jar将在dist文件夹
答案 3 :(得分:1)
<!-- 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}"/>
答案 4 :(得分:0)
好的,这是我的解决方案。我的程序在Netbeans上编译和运行时遇到了问题,但是当我尝试java -jar MyJarFile.jar
时它失败了。现在,我还没有完全理解Maven,我认为这就是为什么让Netbeans 8.0.2将我的jar文件包含在库中以将它们放入jar文件中。我在考虑如何在Eclipse中使用没有Maven的jar文件。
它的Maven编译所有依赖项和插件,而不是Netbeans。 (如果你能让Netbeans这样做,请告诉我们如何。)
[Solved - for 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