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

如何将lib中的jar包含到Netbeans中的项目jar文件中?,netbeans,jar,package,Netbeans,Jar,Package,我正在使用一些apache HttpClient jar,所以我把它们放在项目的lib目录中,当Netbeans编译项目时,它会将lib复制并生成一个项目jar到dist目录中,但是当我使用webstart运行项目时,我需要将项目jar和lib复制到tomcat的根目录中,我想知道Netbeans是否可以生成一个包含lib目录中所有jar的项目jar,这样我就不必将项目jar和lib目录复制到tomcat的根目录中。Netbeans能做到吗?好的,在以下站点找到答案:将每个依赖库(*.jar)打

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

好的,在以下站点找到答案:

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

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

按照以下步骤编辑build.xml

1) 单击NetBeans中项目面板左侧的
文件选项卡

2) 双击
build.xml
文件,并在
行之前添加这些行

 <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>
4) 保存它并右键单击build.xml,选择运行目标,然后选择其他目标,最后单击商店的软件包

5) 你完成了。现在,您可以像查看
dist
文件夹一样查看,将有一个
store
文件夹,其中将包含最终完整的jar,包括所有依赖的库。现在,只要您想更改/添加更多库,只需执行步骤4

步骤4的图片


好的,这就是我的解决方案。我的程序在Netbeans上编译和运行时也有问题,但当我尝试
java-jarmyjarfile.jar
时,它失败了。现在,我不完全理解Maven,我想这就是为什么让Netbeans 8.0.2在库中包含我的jar文件以将它们放入jar文件时遇到问题的原因。我在考虑如何在Eclipse中使用没有Maven的jar文件

是Maven编译所有依赖项和插件,而不是Netbeans。(如果您能让Netbeans这样做,请告诉我们如何做。)

[已解决-适用于Linux]通过打开终端

然后

下一个

下一个

这将在目标目录中创建jar文件

MyJarFile-1.0-jar-with-dependencies.jar
现在

(您可能需要运行:chmod+x MyJarFile-1.0-jar-with-dependencies.jar) 最后

java -jar MyJarFile-1.0-jar-with-dependencies.jar
请看

解决此问题。您只需将以下代码粘贴到
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>

  • 检查MainClass主文件是否在属性>运行中更新为主文件
  • 在项目标记关闭之前,使用以下代码更新Build.xml
  • 
    

  • 属性>打包>勾选全部
  • 清洁和建设
  • 上传到服务器

  • 虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面更改,仅链接的答案可能无效。@Barranka感谢您的反馈,这是一个非常好的观点!当这不是一行代码时,将更新它。请更新你的回答当他说一行代码时,他的意思是你复制并粘贴上面的所有代码,然后只需更改一行代码即可为你的罐子指定所需的名称。胖罐子文件不是dist文件夹中的文件,而是store文件夹中的文件。我在Eclipse中使用了FAT-jar,但在Netbeans中缺少了一个替代方案。再次感谢。@iltafkhalid不客气,Khalid。很高兴看到你高兴。保存XML后,run target被禁用。这确实帮了我的忙!我也有同样的问题。代码在4年多后仍然可以正常工作。我几乎没有其他依赖文件,如abc.txt,是否有必要将此txt文件放入main.jar文件中,而不是与主文件单独提供?虽然此链接可能会回答这个问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面更改,仅链接的答案可能会无效。这是最佳答案。很有魅力。谢谢Hasitha M Jayawardana:-)
    mvn install
    
    MyJarFile-1.0-jar-with-dependencies.jar
    
    cd target
    
    java -jar MyJarFile-1.0-jar-with-dependencies.jar
    
    <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>
    
    <!-- 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}"/>