我有一个项目(在 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/