Как мне сопоставить эту функциональность Eclipse classpath в ant? - PullRequest
0 голосов
/ 26 июня 2011

У меня есть проект (в Eclipse), который вызывает этот метод.

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

Эта папка ui находится в папке в корневом каталоге проекта с именем res.Чтобы получить к нему доступ, я изменил classpath моей конфигурации запуска и поместил запись пользователя, которая ссылается на папку res.

Все работает, когда я запускаю это через конфигурацию запуска.

Теперь я хочу переместить этов сценарий сборки.Вот где мой навык не такой острый.

Это часть моего текущего скрипта сборки муравьев.Он не работает, так как сообщает, что getResource возвращает ноль (файл в основном не найден).

Как мне изменить это, чтобы он работал?

Настройка

<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>

1 Ответ

2 голосов
/ 26 июня 2011

class.getResource (...) будет вызывать classloader.getSystemResource (...). Он будет искать ресурс в том же пути к классам, который использовался для загрузки ваших классов.

Вам нужно добавить свой gameui.xml в свой jar или с указанием его местоположения в атрибуте "Class-Path" в манифесте. Таким образом наш загрузчик классов сможет найти его.

Для option1 : Добавить ресурс в classpath: предоставить дополнительный набор файлов для вашей задачи 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>" />

Если вам не нужен доступ для редактирования этого файла (например, для настройки вашей программы), я бы положил его в банку и избежал проблем с внешним путем.

...