首页 > 解决方案 > Ant javac 任务未编译。它的 'srcdir' 参数的行为不像记录的那样。这是一个错误吗?

问题描述

我已经编写了粘贴在下面的 Ant 脚本。它使用javac任务。Apache 文档指出该scrdir参数用于指向源 (.java) 文件。但它也解释了该javac任务可以使用模式集。

我相信任务中可能存在错误,javac或者至少可能是javacAnt 任务的糟糕实现。

在我的代码中,编译目标失败,因为找不到源文件。谁能解释一下为什么?

背景:

我的项目的目录结构如下:

在此处输入图像描述

我的 ant 脚本在 ant 目录中。

源文件在 wm-adapter/src 中

<?xml version="1.0" encoding="UTF-8"?>
<project name="wm-adapter" default="dev" basedir=".">


<property file="Build.properties"/>
<property name="build.compiler" value="javac1.5"/>

<target name="compile" depends="prepare">
    
    <!-- Define required FileSets and PatternSets... -->
    <patternset id="patternset.wm.adapter.sources">
        <include name="${source.dir}/*.java"/>
        <exclude name=""/>
    </patternset>
    
    <fileset id="fileset.wm.adapter.sources" dir="${proj.dir}">
        <patternset refid="patternset.wm.adapter.sources"/>
    </fileset>
    
    <!-- Compile... -->
    <javac      srcdir="${basedir}"
                destdir="${classes.dir}"
                classpath="${compile.classpath}"
                debug="${javac.debug}"
                verbose="true"
                fork="true"
                source="1.5"
                target="1.5">
                
        
        <patternset refid="patternset.wm.adapter.sources"/>
        
    </javac>
    <echo message="     Compilation completed successfully!"/>
</target>

这是属性文件的一个片段:

# DEFINE DIRECTORY STRUCTURE...
proj.dir=../wm-adapter
source.dir=${proj.dir}/src
build.dir=${proj.dir}/build
classes.dir=${build.dir}/classes
dist.dir=${proj.dir}/dist
lib.dir=../lib
docs.dir=${proj.dir}/documentation
resources.dir=${proj.dir}/www
config.dir=${proj.dir}/config


# DECLARE ANY OTHER WORKING DIRECTORIES...
tmp.jar.dir=C:\\Temp
tmp.app.dir=${tmp.jar.dir}/FATCA_WM_Adapter


# Name the jar file...
jar.file=FATCA_WM_Adapter.jar


# IMPORT EXTERNAL JARS INTO OUR CLASSPATH...
compile.classpath=${g11nutils.jar};${javax.ejb_3.0.jar};${middleware_UTILS.jar};${wmbrokerclient.jar};${classes.dir}
compile.classpath=${classes.dir};${lib.dir}

basedir 已被定义为 '.'

我知道如何使它工作:目标将在以下情况下编译:

  1. 我对模式集进行了更改,如下所示:

    <patternset id="patternset.wm.adapter.sources">
        <include name="src/*.java"/>
        <exclude name=""/>
    </patternset>
    
  2. 在 javac 任务中,我修改srcdir为:

srcdir="${proj.dir}"

但这是一个修复!为什么我的原始设置不起作用?

标签: javabuildantcompilationjavac

解决方案


这里的 basedir 等于你的“ant”子目录,这可能是它不起作用的原因。也许你想<project basedir="..">在顶部。


推荐阅读