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

时间:2012-05-31 13:26:46

标签: java netbeans jar

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

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

我该如何处理这个问题?

12 个答案:

答案 0 :(得分: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>

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

答案 1 :(得分:13)

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

java-forum有一篇很棒的帖子说明了以下内容:

  

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

答案 2 :(得分:7)

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

答案 3 :(得分: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>

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

Apache Ant User Manual中查看更多内容。

答案 4 :(得分:3)

如果您要将应用分发到另一台电脑

你只需将.jar与lib文件夹一起压缩。

如果想从您电脑中的任何位置运行您的应用

接受考虑Maven的做法 - 创建本地存储库,例如。 C:\ libs您的库将存在,而.jar可以稍后从您的电脑中的任何位置访问它们。

或者你可以使用Maven。有关使用所有依赖项(库)分发应用程序的讨论:Java: How do I build standalone distributions of Maven-based projects?

答案 5 :(得分:3)

将该jar文件复制到:

  

C:\ Program Files \ Java \ jdk \ jre \ lib \ ext

  

C:\ Program Files \ Java \ jre \ lib \ ext

您应该能够在Netbeans和手动导入中使用它,就像标准导入一样。

答案 6 :(得分:2)

我找到了解决此问题的最简单方法here。您只需要复制项目文件夹中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,并在最后</project>标记之前添加代码。

  2. 现在将第一个属性字段的值更改为已注释并保存更改。

  3. 从现在开始,每次清洁&amp;构建项目,将在项目dist文件夹

  4. 中生成带有依赖项的完整jar

答案 7 :(得分:1)

这对我有用:

我在我的项目中内置了excel导出功能。我用于此目的的两个外部.jars是jxl.jar end sx.jar

使用7-Zip将这2个罐子解压缩到一个文件夹(java类)中,不带任何META文件。将项目jar解压缩到包含META文件的同一文件夹中。

使用JARMaker重新打包整个java类文件夹,在其原始分发文件夹中重新创建Project .jar ...然后你就可以了...完全的excel功能。

答案 8 :(得分:1)

user1016588的解决方案适合我。有一个错字:这一行应该是     zipfileset src =“dist / lib / commons-io-1.4.jar”excludes =“META-INF / *”

答案 9 :(得分:1)

试试这个 - 在Netbeans IDE中:

  1. 转到工具 - &gt;库
  2. 在对话框的左下角,单击“新建库”,输入名称
  3. 在右侧,点击“添加JAR /文件夹”
  4. 点击右下角的确定
  5. 重新启动IDE并检查。

答案 10 :(得分:0)

请遵循以下规则: - 1.右键单击netbeans编辑器中打开的项目 2.选择属性 3.选择图书馆 4.加入罐子 5.单击确定

答案 11 :(得分:0)

您也可以使用它(当库不在“dist / lib”中时),使用NetBeans和ant-contrib进行测试:

colm1,colm2,colm3...colm159 from table;