怎么来ANT javac命令添加额外的目录?

时间:2010-09-27 12:30:19

标签: ant javac

我今天开始学习ANT,以便简化Java编译。 我编写了简单的ANT脚本,它只使用javac命令。

我正在尝试从 ..... \ head_first \ src \ com \ masatosan \ constant.java (来源)编译

到目标目录:

..... \ head_first \ WEB-INF \类\ COM \ masatosan \ CONF

所以结果如下:

..... \ head_first \ WEB-INF \类\ 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>

更新

我不知道编译器会根据包名创建目录。

constant.java的包名是com.masatosan.conf,因此编译器会创建“/ com / masatosan / conf /”

3 个答案:

答案 0 :(得分:2)

因为包名称。你有一个com.masatosan包中的Java文件。您可以通过两种方式将类移动到默认包或将$ {confDest}值设置为\ head_first \ WEB-INF \ classes \。

答案 1 :(得分:2)

您试图告诉ANT更改包,因为您希望Constant.class位于com.masatosan.conf包下,而不是com.masatosan包。 Ant编译过程将创建相应的包子目录,这就是为什么你看到在dest下创建的com \ masatosan。

我认为你不能告诉ANT更改源文件的包,这是你试图通过注入一个额外的conf dir来做的。您可以创建一个conf目录并使用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" />

答案 2 :(得分:1)

这是因为编译器正在您指定的目标目录下创建包目录结构。 constant类位于com.masatosan包中,因此在classes\com\masatosan\conf下,编译器为包创建另外两个目录com\masatosan,并放置已编译的类({{ 1}})在那里。

您的目标目录应该只是constant.class。将为您创建C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\WEB-INF\classescom目录。