java - 如何在 ant 中匹配 Eclipse 类路径功能?

标签 java eclipse ant classpath

我有一个项目(在 Eclipse 中)执行此方法调用。

GameMain.class.getResource("/ui/gameui.xml");

ui 文件夹位于项目根目录上名为 res 的文件夹内。为了访问它,我修改了运行配置的类路径并放置了一个引用 res 文件夹的用户条目。

当我通过运行配置运行它时,一切正常。

现在我想将其移至构建脚本中。这就是我技术不够精湛的地方。

这是我当前的 ant 构建脚本的一部分。它不起作用,因为它报告 getResource 返回 null(基本上找不到文件)。

如何修改它才能正常工作?

设置

<property name="lib.dir" value="lib" />
<property name="res.dir" value="res" />

<path id="classpath">
    <fileset dir="${lib.dir}" includes="**/*.jar" />
    <fileset dir="${res.dir}" includes="**/*" />
</path> 

编译

<target name="compile" depends="clean">
    <mkdir dir="buildClient/classes" />
    <javac srcdir="src" destdir="buildClient/classes" classpathref="classpath" />
</target>

jar

<target name="jar" depends="compile">
    <mkdir dir="buildClient/jar" />

    <manifestclasspath property="lib.list" jarfile="buildClient/jar/Client.jar">
        <classpath refid="classpath" />
    </manifestclasspath>

    <jar destfile="buildClient/jar/Client.jar" basedir="buildClient/classes">
        <manifest>
            <attribute name="Main-Class" value="murk.main.GameMain" />
            <attribute name="Class-Path" value="${lib.list}" />
        </manifest>
    </jar>
</target>

最佳答案

class.getResource(...)将调用classloader.getSystemResource(...)。它将在用于加载类的同一类路径上查找资源。

您需要将 gameui.xml 添加到 jar 在 list 中的“Class-Path”属性中解决其位置。这样我们的类加载器就能够找到它。

对于选项 1:将资源添加到类路径:为您的 jar 任务提供额外的文件集:

<jar destfile="buildClient/jar/Client.jar" >
<fileset dir="buildClient/classes"/>
<fileset dir="<path to the ui/ dir>" />
...

对于选项2:将目录位置添加到类路径中:

<attribute name="Class-Path" value="${lib.list};<path to the ui/ dir>" />

如果您不需要对此文件的编辑访问权限(例如配置您的程序),我会将其放入 jar 中并避免外部路径问题。

关于java - 如何在 ant 中匹配 Eclipse 类路径功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6485320/

相关文章:

java - 如何将多个 jar 合并为一个?

c++ - 在 C++ 中打开一个文件,相对的还是绝对的?

javax.management.MalformedObjectException。属性值部分中的无效字符 ':'

java - Ant 编译器对特定类文件发出警告

java - 如何将搜索过滤器应用到带有分类过滤的回收 View ?

java - Spring,SockJS - WebSocket 握手期间出错 : Unexpected response code 400

java - 使用 eclipse 和 axis 2 生成第一个 Web 服务客户端时出现问题

java - 在 WebSphere 6.1 上使用 ant/jenkins 生成 EAR 的类转换异常

java - 使用cucumber v1.2.4时运行cucumber测试的方法没有签名

java - Scala 中的加泰罗尼亚数递归