如何将lib中的jar包含到Netbeans中的项目jar文件中?

时间:2013-08-26 18:57:22

标签: netbeans jar package

我正在使用一些apache HttpClient jar,所以我把它们放在我的项目的lib目录中,当Netbeans编译项目时,它复制lib并生成一个项目jar到dist目录,但当我用webstart运行我的项目时,我需要将项目jar和lib复制到tomcat的ROOT目录中,我想知道Netbeans是否可以生成包含lib目录中所有jar的项目jar,所以我不必将项目jar和lib目录复制到tomcat中ROOT目录。 Netbeans能做到吗?

5 个答案:

答案 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步的图片

enter image description here

答案 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>
  1. 转到build.xml,最后在结束项目标记之前添加代码。

  2. 现在将第一个属性字段的值更改为注释

  3. 点击清洁&amp;构建,你的jar将在dist文件夹

  4. 参考链接: https://stackoverflow.com/a/30172829/2761273

答案 3 :(得分:1)

  1. 检查MainClass主文件是否已更新为Properties&gt; run
  2. 中的主文件
  3. 在项目代码关闭之前使用以下代码更新Build.xml
  4. <!-- 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}"/>
    

    1. 性状&gt;包装和GT;勾选所有
    2. 清理并构建
    3. 上传到服务器。

答案 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