почему команда ANT javac добавляет дополнительные каталоги? - PullRequest
0 голосов
/ 27 сентября 2010

Я начинаю изучать ANT сегодня, чтобы упростить компиляцию Java.Я написал простой ANT-скрипт, который использует только команду javac.

Я пытаюсь скомпилировать из ..... \ head_first \ src \ com \ masatosan \ constant.java (источник)

в целевой каталог:

..... \ head_first \ WEB-INF \ classes \ com \ masatosan \ conf

Таким образом, результат будет выглядеть так:

..... \ head_first \ WEB-INF \ classes \ com \ masatosan \ conf \ constant.class

Но яне могу понять, почему фактический результат добавляет каталоги "/ com / masatosan / conf" в папку назначения , поэтому он выглядит так:

C: \ Program Files \ Apache Software Foundation\ Tomcat 6.0 \ webapps \ head_first \ WEB-INF \ classes \ com \ masatosan \ conf \ com \ masatosan \ constant.class

Может кто-нибудь сказать мне, как я могу это исправить?

ANT

<project name="CompileMasatosan" 
    basedir="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\src\com\masatosan">
    <description>
        masatosan compiler
    </description>
    <property name="confSrc" 
        location="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\src\com\masatosan\conf" />
    <property name="confDest"
        location="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\WEB-INF\classes\com\masatosan\conf" />

    <target name="compileConfSrc">
        <javac srcdir="${confSrc}" destdir="${confDest}" />
    </target>
</project>

ОБНОВЛЕНИЕ

Я не знал, что complier создает каталоги на основе имени пакета.

Имя пакета constant.java былоcom.masatosan.conf, чтобы выполнитьr создает "/ com / masatosan / conf /"

Ответы [ 3 ]

2 голосов
/ 27 сентября 2010

Это из-за названия пакета.У вас есть файл Java в пакете com.masatosan.Это можно исправить двумя способами: либо переместить класс в пакет по умолчанию, либо установить значение $ {confDest} равным \ head_first \ WEB-INF \ classes \ only.

2 голосов
/ 27 сентября 2010

Вы пытаетесь указать ANT изменить пакет, потому что вы хотите, чтобы Constant.class находился в пакете com.masatosan.conf, а не в пакете com.masatosan.В процессе компиляции Ant будут созданы соответствующие подкаталоги пакетов, поэтому вы видите, что com \ masatosan создан под dest.

Не думаю, что вы можете сказать ANT изменить пакет исходного файла, которыйто, что вы пытаетесь сделать, вводя дополнительную конф.Вы можете создать каталог-каталог и иметь conf\com\masatosan\constants.class или поместить его в classes\com\masatosan\constants.class, но вы не можете сделать com\masatosan\conf\constants.class, так как это изменит пакет constants.class на com.masatosan.conf

Илипросто измените пакет constants.class на com \ masatosan \ conf и измените файл ant на:

<property name="confDest" location="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\WEB-INF\classes" />

1 голос
/ 27 сентября 2010

Это потому, что компилятор создает структуру каталога пакета в указанном вами каталоге назначения. Класс constant находится в пакете com.masatosan, поэтому в classes\com\masatosan\conf компилятор создает еще две директории для пакета com\masatosan и помещает туда скомпилированный класс (constant.class).

Ваш каталог назначения должен быть просто C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\WEB-INF\classes. Каталоги com и masatosan будут созданы для вас.

...