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

时间:2016-05-02 19:23:48

标签: java netbeans jar classpath libraries

我正在使用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的东西,它将从jar文件中的类路径中删除lib并允许我们在同一目录中引用一个jar。我想要一个不涉及store-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>

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:0)

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

假设您有Netbeans,请按以下步骤操作:

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

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

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

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

  5. 通过这种方式,当一切都完成后,Netbeans会在后台编写ant脚本,所有内容都会自动处理。绝对没有必要触摸MANIFEST.MF文件。

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