如何在Netbeans项目中包含外部jar

ksm*_*001 23 java netbeans jar

当我运行"clean and build"时,.jar只有当lib文件夹位于.jar文件的同一文件夹时,才会运行正在创建的文件.

因此,如果我将jar文件移动到桌面并将lib文件夹保留在文件dist夹中,那么jar文件将给我一个例外.

我该如何处理这个问题?

Hem*_*ela 23

我通过创建一个包含所有库的jar文件解决了这个问题,将以下内容添加到NetBeans中的build.xml文件中:

<target name="-post-jar">
  <jar jarfile="dist/Combined-dist.jar">
    <zipfileset src="${dist.jar}" excludes="META-INF/*" />
    <zipfileset src="lib/commons-io-1.4.jar" excludes="META-INF/*" />
    <zipfileset src="lib/ninja-utils-3.2.jar" excludes="META-INF/*" />
    <zipfileset src="lib/unicorn-1.0.jar" excludes="META-INF/*" />
    <manifest>
        <attribute name="Main-Class" value="com.example.mypackage.Main"/>
    </manifest>
  </jar>
</target>
Run Code Online (Sandbox Code Playgroud)

这将创建一个jar文件(Combined-dist.jar),它是dist jar和指定库jar的组合(在本例中为commons-io-1.4.jar,ninja-utils-3.2.jar和unicorn-1.0).罐).您必须确保为新的jar文件指定Main Class包,否则当您尝试打开它时它将不会运行.


rli*_*den 13

如果将jar复制到源代码目录中,它们将在最终的jar中.毫无疑问,我不确定这是否会100%有效.

java-forum上有一篇很棒的文章说明如下:

除少数情况外,对我来说最有效的方法是手动合并文件..jar基本上是一个带有组织内容的.zip,您可以在几乎任何.zip功能的归档程序中打开它们(我只使用gnome的标准归档程序,File Roller,它运行良好).备份您的jar文件并在您选择的归档器中打开它,并对库目录中的每个库jar执行相同的操作.将每个库中的工作文件夹(IE,除META-INF目录之外的所有内容)拖放到jar的根路径中(与META-INF和应用程序的根程序包一起).现在将jar中的META-INF/MANIFEST.MF文件拖到桌面或任何其他文件夹中.打开它,擦除Class-Path和X-COMMENT行.不要忘记在文件末尾留下空白换行符!保存新的清单文件并将其拖回到jar的META-INF目录中,覆盖旧的清单文件.测试罐子.


Abd*_*rai 8

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

在此输入图像描述


Pau*_*gas 5

从版本1.7开始,您可以使用Apache Ant在仅一个文件中构建具有所需库的JAR.您可以拥有如下配置文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="buildJar">
    <target name="buildJar">
        <!-- Name of jar -->
        <jar destfile="C:/MyJar.jar" filesetmanifest="mergewithoutmain">
            <manifest>
                <!-- Your class with the main method -->
                <attribute name="Main-Class" value="myPackage.MyClass"/>
                <!-- Path in the jar -->
                <attribute name="Class-Path" value="."/>
            </manifest>
            <!-- Dir of compiled class -->
            <fileset dir="C:/NetBeansProjects/MyProject/bin"/>
            <!-- Include required jars -->
            <zipfileset excludes="META-INF/*.SF" 
                src="C:/NetBeansProjects/MyProject/lib/library1.jar"/>
            <zipfileset excludes="META-INF/*.SF" 
                src="C:/NetBeansProjects/MyProject/lib/library2.jar"/>
        </jar>
    </target>
</project>
Run Code Online (Sandbox Code Playgroud)

在Netbeans中,将XML文件放在项目中并使用上下文菜单运行它.

查看更多在Apache Ant的用户手册.