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

Fra*_*ank 35 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能做到吗?

Abd*_*rai 77

将每个依赖库(*.jar)打包到一个单独的myProject.jar中非常容易.

只需按照这些步骤操作,您最终将每个依赖库打包到单个jar中.如果您正在使用NetBeans,那么您可以完全遵循,否则您需要在项目文件中找到您的build.xml文件.

请按照以下步骤编辑build.xml

1)单击Files tabNetBeans中项目面板的左侧.

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>
Run Code Online (Sandbox Code Playgroud)

3)value根据您的项目名称更改代码的第二行

<property name="store.jar.name" value="myProject"/> //<---Just value not name
Run Code Online (Sandbox Code Playgroud)

4)保存并右键单击build.xml并选择Run Target,然后选择Other Targets,最后单击Package-for-store

5)在这里你完成了.现在您可以像dist文件夹一样检查,将会有一个store文件夹,其中包含您的最终完整jar,包括所有依赖库.现在,无论何时想要更改/添加更多库,只需按照步骤4进行操作即可.

步骤4的图片

在此输入图像描述

  • 爱你的男人,像一个魅力,我在Neatbeans努力争取一个单一的罐子.我在Eclipse中使用FAT jar并且在Netbeans中缺少替代品.再次感谢. (2认同)

Fra*_*ank 10

好的,在以下网站找到答案:http://arunasujith.blogspot.com/2011/08/how-to-build-fat-jar-using-netbeans.html

  • 尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。 (2认同)

Den*_*ebi 6

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>
Run Code Online (Sandbox Code Playgroud)
  1. 转到build.xml,并在结束时关闭项目标记之前添加代码.

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

  3. 单击"清理并生成",您的jar将位于dist文件夹中

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