2015-10-12 6 views
1

У меня есть макросы (1.9.4), которые принимают структуру типа пути как src param, и когда я пытаюсь запустить его, я получаю 'FILE_NAME.java is not a directory'.ant macros: fileset as javac src element

Мой файл сборки:

<project name="test" default="main"> 
    <macrodef name="testm"> 
     <element name="srcdir"/> 
     <sequential> 
      <javac destdir="target"> 
       <src> 
        <srcdir/> 
       </src> 
      </javac> 
     </sequential> 
    </macrodef> 

    <target name="build-project"> 
     <testm> 
      <srcdir> 
       <fileset dir="src"> 
        <include name="**/*.java"/> 
       </fileset> 
      </srcdir> 
     </testm> 
    </target> 

    <target name="main" depends="build-project"/> 
</project> 

ответ

0

Попытка вызвать макросы как

<testm> 
    <srcdir> 
     <path location="src"/> 
    </srcdir> 
</testm> 
0

A <src> вложенной под <javac> не может иметь <srcdir> вложенные в него.

Вместо этого, передать <src> от вызывающей <testm> ...

<macrodef name="testm"> 
    <element name="srcdir"/> 
    <sequential> 
     <!-- Nest <srcdir> directly under <javac> --> 
     <javac destdir="target"> 
      <srcdir/> 
     </javac> 
    </sequential> 
</macrodef> 

<target name="build-project"> 
    <testm> 
     <srcdir> 
      <!-- Pass <src> directly to <javac> via the macrodef --> 
      <src path="src"/> 
     </srcdir> 
    </testm> 
</target> 

я удалил <include name="**/*.java"/> потому <javac>**/*.java включает в себя все файлы по умолчанию.

В качестве другого примера можно передать несколько <javac> опции для <testm> с одним аргументом ...

<macrodef name="testm"> 
    <element name="javac-args"/> 
    <sequential> 
     <javac destdir="target"> 
      <javac-args/> 
     </javac> 
    </sequential> 
</macrodef> 

<target name="build-project"> 
    <testm> 
     <javac-args> 
      <src path="src"/> 
      <classpath> 
       <pathelement location="my.jar"/> 
      </classpath> 
     </javac-args> 
    </testm> 
</target> 
+0

Если мне нужно добавить путь к классам одним и тем же способом. ''? – wtrclr

+0

@wtrclr Я отредактировал свой ответ с другим примером, показывающим вложенный ''. –