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

Wea*_*unk 7 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>
Run Code Online (Sandbox Code Playgroud)

小智 1

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

<path id="ant.classpath">
    <fileset dir="common-libs">
        <include name="*.jar" />
    </fileset>
</path>
Run Code Online (Sandbox Code Playgroud)

在你的 build.xml 中,它可以指向你所需的“*.jar”所在的文件夹。

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

更多参考, 类路径结构

并且, Ant 版本 1.8.0 中的类路径、路径和路径元素记录在哪里