使用 NetBeans 设置 jar 文件以从类路径中删除 lib

Set jar file to remove lib from classpath using NetBeans

我正在使用 NetBeans 8.1、Apache Ant 1.9.4 和 Java 1.8.0_66.

在我们的本地网络部署环境中,我们有一个带有/lib 子目录的apps 目录。我们在 /lib 中有一个库 (Library.jar),它依赖于 /lib 中的其他库 (Dep.jar)。许多应用程序 (App.jar) 依赖于 Library.jar。这些库和应用程序中的许多都是一段时间以前构建的,并且使用的版本比我提到的要旧(Java 1.6 或更早版本)。

以前,App.jar 的清单会引用 Class-Path: lib/Library.jar Library.jar 将引用 Class-Path: lib/Dep.jar.

在我们进行一些修复并将 Library.jar 更新到最新版本的 Java 之前,这一直有效。现在,当我们 运行 App.jar 时, Dep.jar 是找不到的,尽管我们的清单看起来和以前一样。 App.jar 现在正在寻找 lib/lib/Dep.jar 而不是 lib/Dep.jar,因为 Library.jar 在 /lib 目录中。

到目前为止,我们最好的解决方案是将 Library.jar 中的 Manifest.mf 文件编辑为 Class-Path: Dep.jar。这可以防止 App.Jar 深入两个库来查找 Dep.Jar。然而,编辑 jar 文件不是我们想要做的常见做法,所以我们更喜欢 NetBeans IDE 中的解决方案,或者我们可以添加到 build.xml 的解决方案,它将从类路径中删除 lib jar 文件,并允许我们引用同一目录中的 jar。我想要一个不涉及 package-for-store 的解决方案,因为我们想更新我们依赖的 jar,同时维护指向它们的指针。

另外,我想知道是什么引起了变化,是版本更新还是其他原因。任何帮助将不胜感激。

当前 build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Library" default="default" basedir=".">
    <description>Builds, tests, and runs the project Library.</description>
    <import file="nbproject/build-impl.xml"/>
</project>

您可以使用 Apache Ant 的 <path><classpath>,如下定义,

<path id="ant.classpath">
    <fileset dir="common-libs">
        <include name="*.jar" />
    </fileset>
</path>

在您的 build.xml 中,它可以指向您所需的 ``*.jar" 所在的文件夹。

然后在构建命令的 target 中构建应用程序时使用此路径。

更多参考, Path-like Structures

而且, Where are classpath, path and pathelement documented in Ant version 1.8.0

使用 IDE(Netbeans 或 Eclipse)时,您不应在任何时候接触清单文件。 IDE 根据您的项目设置为您做所有事情。

假设您有 Netbeans,请执行以下操作:

  1. 从清单文件中删除所有条目。

  2. 转到项目导航器中的每个项目,右键单击并出现 select 属性对话框。

  3. 浏览您的所有项目并select 相同的Java 平台。如果项目是用旧 java 编写的,您可以毫无问题地升级它们。所有 java 代码都是无缝向后兼容的。如果您的旧 java 项目被移植到最新的 java.

  4. ,不会有什么不好的事情发生
  5. 这一步完成后,还需要设置项目间的依赖/引用。您在项目属性对话框的库类别中管理所有引用,选项卡名为 "Compile"。如果依赖项也是 Netbeans 项目,请单击按钮添加项目。如果依赖是外部第三方jar,select添加jar/folder.

这样,当一切都完成后,Netbeans 会在后台编写 ant 脚本,一切都会自动处理。绝对不需要触摸 MANIFEST.MF 个文件。

在此安装过程中,您可以在磁盘上项目的 dist 文件夹中检查事情的进展情况。 (shift+F11 清理并构建项目)。