【问题标题】:Set jar file to remove lib from classpath using NetBeans使用 NetBeans 设置 jar 文件以从类路径中删除 lib
【发布时间】:2016-08-27 16:03:41
【问题描述】:

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

在我们的本地网络部署环境中,我们有一个带有 /lib 子目录的应用程序目录。我们在 /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 中的东西,它将从 jar 文件的类路径中删除 lib 并允许我们引用同一目录中的 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>

【问题讨论】:

  • 请发布您当前build.xml的内容。
  • 当前的build.xml没什么特别的,你可以看到

标签: java netbeans jar classpath libraries


【解决方案1】:

您可以使用 Apache Ant 的&lt;path&gt;&lt;classpath&gt;,定义如下,

<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

【讨论】:

  • 谢谢,这看起来很有希望,但我有一些问题。 1. 我们有一个很大的 lib 文件夹,所以我想指向单个 jar,而不是整个文件夹。你知道怎么做吗? 2. 是否可以从 Netbeans 内置构建中隐式调用构建目标?我更喜欢可以更轻松地为多个用户简化的解决方案。
  • ` ` 只是一个例子。您可以根据需要指定不同的选项。请通过Maven Documentation
  • 谢谢,我去看看。第二个问题呢?我可以通过单击 Netbeans 的“构建”按钮来使其工作,还是需要右键单击 build.xml 并执行“运行目标”?
  • 我从未使用过 Netbeans(因为我更喜欢 Eclipse 和 intellij idea 等其他 IDE),但我认为您可以通过 NetBeans Ant-Based Project Type Module Tutoria
【解决方案2】:

在使用 IDE(Netbeans 或 Eclipse)时,您不应该在任何时候接触清单文件。 IDE 会根据您的项目设置为您完成所有工作。

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

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

  2. 在项目导航器中转到每个项目,右键单击并选择属性对话框。

  3. 浏览所有项目并为它们选择相同的 Java 平台。如果项目是用较旧的 java 编写的,您可以毫无问题地升级它们。所有java代码都向后兼容无缝。如果您的旧 Java 项目被移植到新的最新 Java 上,不会有什么不好的事情发生。

  4. 这一步完成后,需要设置项目间依赖/引用。您可以在项目属性对话框的库类别中管理所有引用,该选项卡名为“编译”。如果依赖项也是 Netbeans 项目,请单击按钮添加项目。如果依赖项是外部第三方 jar,请选择添加 jar/文件夹。

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

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

【讨论】:

  • 管理这些依赖不是问题。问题是 Netbeans 默认情况下会在类路径中添加一个“lib/”。中间 jar 位于 lib 文件夹中,但它指向不存在的 lib/lib/,因为它已经在 lib/ 中并正在寻找较低的 lib/。尽管新旧清单看起来相同,但这些引用在过去可以正常工作。感谢您的尝试
猜你喜欢
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 2012-03-28
  • 1970-01-01
  • 2018-04-25
相关资源
最近更新 更多