【问题标题】:How to include jars in lib into project jar file in Netbeans 8.2?如何将 lib 中的 jar 包含到 Netbeans 8.2 中的项目 jar 文件中?
【发布时间】:2020-10-03 22:30:39
【问题描述】:

当我构建 jar 文件时,它会创建一个单独的文件夹 lib,但由于我可以将所有内容合并到一个文件中,所以我看到了如何做到这一点 here,但在这个新版本(8.2)中它没有'不起作用,因为站点菜单已更改,并且当我添加 build.xml 时,我无法右键单击 > 运行目标,因为它“阻止”了该元素

我们的目标是只有一个文件,为了更方便而不必移动文件夹 lib,自动生成。项目类型是Java Application,我没有修改build.xml中的任何内容

【问题讨论】:

  • 您能否通过编辑(而不是添加 cmets)来澄清您的问题。你想达到什么结果?你在build.xml 中添加了什么?您要运行哪个 ant 目标?

标签: java netbeans build jar


【解决方案1】:

选项一

假设您有:(a) 一个标准的基于 Ant 的项目(听起来像您有),并且 (b) 您在通常的 NetBeans“库”文件夹中有额外的 JAR 文件,那么您可以执行以下操作:

1) 编辑项目的build.xml 文件。

2) 转到文件末尾,并在最后的</project> 标记之前添加以下内容:

    <target name="-post-jar">
        <jar destfile="${dist.jar}"
             update="true">
            <restrict> 
                <archives>
                   <zips>
                       <fileset dir="${dist.dir}" includes="lib/*.jar"/>
                   </zips>
                </archives>
            </restrict>
        </jar>
    </target>

这为 NetBeans 中的标准“清理和构建”过程增加了一个额外的步骤。

它将库文件的内容复制到应用程序的 JAR 文件中。请注意,我在这里明确地说“内容”。它不会复制 JAR 文件本身 - 因为您必须处理由该方法引起的类路径问题(请参阅选项 2)。它只是将库 JAR 中的所有类文件复制到应用程序的 JAR 中。

以上内容基于 Ant 文档中的 here 示例。请参阅“合并档案”示例。

然后,您可以使用以下内容运行 JAR 文件:

"C:\Program Files\Java\jdk1.8.0_211\bin\java" -jar C:\tmp\DemoOne.jar

选项二

在构建过程(和 JAR 依赖项管理)中使用 Maven,而不是 Ant。具体细节不在本题讨论范围内,请查找Maven Shade 插件。

该插件专门设计用于处理您的问题中的情况 - 并处理我上面的选项 1 可能无法处理的更复杂的情况。使用 Maven 管理您的依赖 JAR 也可以让您的生活变得更加轻松。

其他说明

拥有一个包含所需库 JAR 的单独“lib”目录可能感觉不方便(即不太可移植),但从将代码与其他库分开(在其自己的 JAR 中)和依赖关系。

NetBeans 8.2 于 2016 年 10 月发布 - 它(按照 IDE 的标准)已经相当老了。如果可以的话,您可能需要考虑升级到更高版本。有关最新版本的列表,请参阅 here

使用较新版本的 NetBeans,您将能够更轻松地利用较新版本的 Java。

编辑 - Maven 阴影

这是一个基于 Maven 的示例(使用 Java 11),以防它鼓励您重新审视 Maven。

这是Java程序:

package org.ajames.uberjar;

import org.apache.commons.lang3.CharUtils;

public class App {

    public static void main(String[] args) {
        System.out.println("The result is " + CharUtils.isAscii('x') + "!");
    }

}

如您所见,它非常简单。它需要一个外部 JAR 文件:commons-lang3

当您选择创建新的基于 Maven 的 Java 项目时,NetBeans 会为您创建一个 Maven POM 文件 (pom.xml)。

您必须编辑该 POM 文件。这是我的,它创建了一个包含我需要的所有东西的可执行 JAR:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.ajames</groupId>
    <artifactId>UberJarExample</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.10</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>UberJarExample</finalName>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Built-By>ajames</Built-By>
                                        <Main-Class>org.ajames.uberjar.App</Main-Class>
                                        <Build-Number>123</Build-Number>
                                        <!-- https://planet.jboss.org/post/building_multi_release_jars_with_maven -->
                                        <Multi-Release>false</Multi-Release>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>            

        </plugins>
    </build>

</project>

【讨论】:

  • Gracias por tomarse el tiempo para responder, En cuanto a la segunda opción, traté de usar maeven pero al final me di por vencido debido a algunos errores que no pude arreglar, trataré de crear el proyecto en un net bean más moderno en caso de que me den alguna opción al construir, de nuevo gracias por su tiempo
  • 我添加了一个用于创建可执行 JAR 文件的 Maven 示例。
猜你喜欢
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2012-06-05
  • 2011-10-23
  • 1970-01-01
  • 2014-09-27
相关资源
最近更新 更多