2009-08-01 2 views
21

Я в процессе упаковки своего приложения Java в файл jar. Я использую ant и eclipse. Мне нужно фактически включить в банку пару отдельных файлов без кода (файлы xml и txt) непосредственно под корневой папкой, а не в том же месте, что и код.Добавление ресурсов без кода в файл jar с использованием Ant

Я пытаюсь использовать includesfile, но это не похоже на работу, вот мой муравей цель:

<target name="distribute" depends="compile" includesfile="readthis.txt"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
     <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/>   
    </jar> 
</target> 

выше отлично работает, когда я опустить includesfile аргумент. Кроме того, мне нужно добавить несколько файлов без кода. Эти файлы находятся непосредственно в папке корневого проекта в Eclipse, а не в каких-либо java-пакетах.

Кроме того, как вы можете видеть выше, я в основном включаю в jar свой исходный код. Есть ли способ сообщить задачам jar поставить исходный код в отдельную папку из скомпилированного кода?

В качестве задачи компиляции или сборки Ant легко может отделять исходный код от скомпилированных классов. Но есть ли способ сделать это и в файле jar?

Большое спасибо за ваше время!

ответ

34

Вы не должны иметь includesfile атрибут в цели, чтобы начать с, и я подозреваю, что вы не поняли точку это в любом случае - идея о том, что файл, указанный с includesfile содержит шаблоны для файлов, которые необходимо если вы не хотите помещать их в файл Ant.

Мне кажется, что все, что вам нужно, это дополнительный набор файлов, содержащий нужные вам файлы. Например, для readthis.txt:

<target name="distribute" depends="compile"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
    <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/> 
    <fileset file="readthis.txt" /> 
    </jar> 
</target> 

Я также хотел бы предложить вам создать новый каталог для ресурсов, так что вы можете сделать:

<target name="distribute" depends="compile"> 
    <jar destfile="${distributionDir}/myjar.jar" > 
    <fileset dir="${outputDir}"/> 
    <fileset dir="${sourceDir}"/> 
    <fileset dir="${resourcesDir}" /> 
    </jar> 
</target> 

без каких-либо хлопот. Это также упростит вашу структуру каталогов, что упростит поиск вещей сверху вниз.

+0

Спасибо! Это, безусловно, помогло. Мне было интересно, могу ли я также задать задачу jar для разделения источника из скомпилированных классов? В это время оба источника и классы расположены в одной структуре пакета. Должна ли задача jar сохранять выходные и src-папки? Смысл этого, когда я расширяю банку, я вижу в myjar/code/my/package/file.java и file.class Я думал, что задача jar может сохранить папки как: myjar/code/my/package /source/file.java - и отдельно myjar/code/my/package/build/file.class Я пропустил что-то в своем использовании задачи о банке? – denchr

+0

Нет, вы ошибаетесь. Они должны быть бок о бок. Если в jar содержится структура папок, такая как code/my/package/build/file.class, это подразумевает, что имя пакета должно быть code.my.package.build. Вы также можете просто поместить источники во второй файл JAR. –

+0

Я понимаю, что вы имеете в виду. Soemthing, как то, что я предлагаю, будет иметь последствия для именования пакетов ... Итак, в общем случае, если я хочу включить источник в свой файл jar, он * будет * находиться в той же папке, что и скомпилированная сборка. – denchr

Смежные вопросы