40

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

4

5 回答 5

96

将每个依赖库 (*.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>

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

<property name="store.jar.name" value="myProject"/> //<---Just value not name

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

5) 到此,你就完成了。现在你可以像dist文件夹一样去检查,会有一个store文件夹包含你最终的完整 jar,包括你所有的依赖库。现在,每当您想更改/添加更多库时,只需按照第 4 步操作即可。

步骤 4 的图片

在此处输入图像描述

于 2014-11-08T08:42:11.263 回答
12

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

于 2013-08-26T19:44:30.260 回答
9

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

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

  3. 单击 Clean & Build,您的 jar 将在 dist 文件夹中

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

于 2015-05-11T16:31:19.273 回答
1

好的,这就是我的解决方案。我的程序在 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

于 2015-02-13T00:39:05.800 回答
1
  1. 检查 MainClass 主文件是否更新为属性>运行中的主文件
  2. 在项目标签关闭之前使用以下代码更新 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}"/>

  1. 属性>包装>全部勾选
  2. 清洁和建造
  3. 上传到服务器。
于 2018-01-14T11:53:07.990 回答