Работа с пространством имен муравьев / структурой каталогов - PullRequest
2 голосов
/ 09 июня 2009

Я работаю с Ant на Linux с помощью командной строки. У меня есть простой шаг сборки с Javac. Это компилируется правильно, но создает структуру каталогов при сборке, как мое пространство имен.

т.е.: ./build/com/crosse/samplespace/SampleProgram.class

Как я могу получить эти выходные данные в одном каталоге (где проще вызывать Java).

Я пытался

 <target name="output" depends="compile">
            <copy todir="${output}">
                    <fileset dir="${build}" includes="**/*.class"/>
            </copy>
 </target>

но это повторяет то же самое в моем выходном каталоге. Как я могу использовать ant, чтобы собрать все в один каталог?

В качестве альтернативы, как я могу использовать шаг ant для копирования другого файла в корень этого пути (файл конфигурации apache commons)?

Редактировать: Это в основном фактор удобства, мне надоело перемещаться по тем же 3 каталогам для запуска моей программы.

Ответы [ 3 ]

2 голосов
/ 09 июня 2009

А как насчет создания файла JAR, содержащего все ваши файлы (классы и другие ресурсы)? Jar также имеет класс 'default', основной метод которого выполняется, когда пользователь дважды щелкает по нему или вызывает его, используя java -jar <jar-file>. Вы можете использовать задачу Ant jar .

Кроме того, важно, чтобы вы сохранили структуру каталогов (вне jar-файла), иначе загрузчик классов java не будет счастлив, когда ему придется загружать эти классы. Или я неправильно понял ваш вопрос?

1 голос
/ 15 июня 2009

Чтобы ответить на ваш вопрос, вы должны использовать flatten mapper , как указывает carej. Задача copy даже имеет ярлык для нее:

<copy todir="${output}" flatten="yes">
    <fileset dir="${build}" includes="**/*.class"/>
</copy>

Однако , я также не понимаю, что вы надеетесь достичь с этим. Среда выполнения Java предполагает, что файлы классов находятся в структуре каталогов, которая отражает структуру пакета. Копирование файлов классов в каталог верхнего уровня не будет работать, если только классы не входят в пакет по умолчанию (в файлах .java нет оператора package).

Если вы хотите избежать необходимости вручную изменять каталоги, вы всегда можете добавить цель в файл сборки ant, который вызывает задачу java с соответствующим classpath и другими параметрами. Например:

<target name="run" depends="compile">
    <java classname="com.crosse.samplespace.SampleProgram"
          classpath=".:build"/>
</target>
0 голосов
/ 09 июня 2009

Вы можете выполнить то, что вы хотите сделать, используя flattenmapper, но я не могу понять, какая у вас есть для этого веская причина.

...