NetBeans - 在一个jar中部署所有内容

Tim*_*Tim 14 java netbeans jar

可能重复:
将外部库放到JAR中?

我有NetBeans 6.8,我写了一个有两个库(jar文件)的类.构建它,我得到一个带有project.jar的"dist"文件夹和一个包含两个lib jar文件的"lib"文件夹.

我怎么能在一个jar文件中得到所有这些?(我不使用Maven/Ant或类似的东西.)

Tho*_*sen 13

基本问题是当前版本的Java不支持开箱即用的jar内的jar.

推荐的解决方案是使用jar中MANIFEST.MF文件中的Class-Path行指向所需的库(允许相对路径),然后将所有文件一起部署并使用"java -jar your.jar"调用它们

如果你真的想要一个"jar-inside-jar"解决方案,我们已经使用了一个罐子好几年了,但是因为我们的目标JVM在上述解决方案中运行得更好,所以我们已经离开了它.

http://one-jar.sourceforge.net/

我在Eclipse中使用了fatjar插件.我没有将它构建到Netbeans中的任何经验,但是构建成一个蚂蚁脚本很简单,我相信它是NEtbeans所使用的.


Wav*_*ick 12

您可以在build.xml文件中创建额外的构建目标.并使用zipfilesetzipgroupfileset创建一个大罐子,例如

<target name="YourBigJar" depends="-post-jar">
  <jar destfile="BigJar.jar">
    <zipfileset src="dist/Project1.jar"/>
    <zipfileset src="../OtherProject/dist/project2.jar"/>
    <zipgroupfileset dir="../libs/."/>
  </jar>
</target>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将打破签名的罐子等. (3认同)

Jos*_*orn 12

我同意Waverick的观点.使用NetBeans执行此操作的最简单方法是将自定义目标添加到build.xml.(顺便说一下,由于使用NetBeans,您使用的是Ant,因为NetBeans使用Ant来构建您的jar文件.)

Waverick的Ant目标似乎旨在将来自不同NetBeans项目的已编译代码合并到当前项目的jar文件中.我的目标完全符合您的要求.

<target name="-unjar-and-copy-lib-jars">
    <unjar dest="${build.classes.dir}">
        <fileset dir="lib">
            <include name="**/*.jar"/>
        </fileset>
        <patternset>
            <exclude name="META-INF/**"/>
            <exclude name="/*"/>
        </patternset>
    </unjar>
</target>

<target depends="init,compile,-pre-pre-jar,-pre-jar,-unjar-and-copy-lib-jars" name="fat-jar">
    <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
    <jar destfile="${dist.jar}">
        <fileset dir="${build.classes.dir}"/>
        <manifest>
            <attribute name="Main-Class" value="${main.class}"/>
        </manifest>
    </jar>
    <echo>To run this application from the command line without Ant, try:</echo>
    <property location="${dist.jar}" name="dist.jar.resolved"/>
    <echo>java -jar "${dist.jar.resolved}"</echo>
</target>

<target depends="clean,fat-jar" name="clean-and-fat-jar"/>
Run Code Online (Sandbox Code Playgroud)