2013-07-05 4 views
0

Я новичок в ANT. У меня есть ниже структуру проекта,ANT компиляция завершена

 Project 
     module1 
      build.xml 
     module2 
      build.xml 
     lib 

Что происходит, я сконфигурированный build.xml в модуле 2 для построения JAR классов module2 и поместить его в папку Lib. Теперь я вызываю build.xml fo module2 из build.xml module1. module1 требует компиляции JAR модуля 2. Я вижу JAR в папке lib, но модуль 1 не компилируется. Может кто-нибудь, пожалуйста, помогите мне? Вот мои build.xml файлы, module1 build.xml,

<?xml version="1.0" encoding="UTF-8"?> 

<property name="app.name" value="module1" /> 
<property name="src.home" value="${basedir}/src/main/java" /> 
<property name="build.home" value="${basedir}/build" /> 
<property name="ear.home" value="${basedir}/ear" /> 
<property name="module2.home" value="../module2" /> 
<property name="external.lib.dir" value="../lib" /> 

    <path id="lib.path"> 
    <fileset dir="${external.lib.dir}"> 
     <include name="*.jar" /> 
    </fileset> 
</path> 

<path id="module2.path"> 
    <filelist dir="${module2.home}" /> 
</path> 


<target name="clean"> 
    <delete dir="${build.home}" /> 
    <delete dir="${ear.home}" /> 

</target> 
<target name="prepare" depends ="clean" 
    description="Create build dirs and copy static files to work dir"> 
    <mkdir dir="${build.home}" /> 
    <mkdir dir="${build.home}/classes" /> 
</target> 


<target name="compile" depends="prepare" 
    description="Compile Java sources and copy to build/classes dir"> 

    <javac includeantruntime="false" srcdir="${src.home}" destdir="${build.home}/classes"> 
     <classpath refid="lib.path" /> 
    </javac> 
    <copy todir="${build.home}/classes"> 
     <fileset dir="${src.home}" excludes="**/*.java" /> 
    </copy> 
</target> 
<target name="includeJar"> 
    <subant target="buildJar"> 
     <fileset dir="../module2/" includes="build.xml" /> 
    </subant> 
</target> 

<target name="buildEar" depends="includeJar,compile"> 
      <jar destfile="${basedir}/ear/${app.name}.ear" basedir="${build.home}" /> 
</target> 

А вот module2 build.xml,

<?xml version="1.0" encoding="UTF-8"?> 
<project name="module2">  
<property name="app.name"  value="module2"/> 
<property name="src.home"  value="${basedir}/src/main/java"/> 
<property name="build.home" value="${basedir}/build"/> 
<echo> 
    module2 build.xml 
</echo> 
<target name="clean"> 
    <delete dir="${build.home}"/> 
</target> 
<target name="init" depends="clean" 
      description="Create build dirs and copy static files to work dir"> 

    <mkdir dir="${build.home}"/> 
    <mkdir dir="${build.home}/classes"/>  
    </target> 


<target name="compile" depends="init" 
      description="Compile Java sources and copy to build/classes dir"> 
    <javac includeantruntime="false" srcdir="${src.home}" 
      destdir="${build.home}/classes"> 

    </javac> 
    <copy todir="${build.home}/classes"> 
     <fileset dir="${src.home}" excludes="**/*.java"/> 
    </copy> 
    </target> 

<target name="buildJar" depends="compile"> 
    <echo>Inside buildJar of module2 
      </echo> 
    <jar destfile="../lib/${app.name}.jar" 
     basedir="${build.home}" 
     /> 
    </target> 

+7

Пожалуйста размещают build.xml файлы, чтобы иметь лучшее представление о том, что можно было бы Происходил –

+0

редакцию своего поста, чтобы содержать build.xml файлы – paary

+0

@Mark - теперь он работает. Добавлено изменений ниже. Спасибо :) – paary

ответ

0

Решила проблему. Это была глупая ошибка, которую я забыл. Вот изменения, которые я сделал, module2's build.xml, 1. Я внесла следующие изменения: Изменил baseir jar from basedir = "$ {build.home}" на basedir = "$ {build.home}/classes " module1's build.xml. 2. Сделано аналогичное изменение, как описано выше, чтобы построить цель цели. Я способен генерировать успешно EAR :)

Спасибо вам Марк за ваше время :)

0

Казалось бы, модуль1 не компилируется, потому что банка, созданная модулем2, не строится.

Вы называете задачу subant, без указания цели:

<subant target="buildJar"> 
    <fileset dir="../module2/" includes="build.xml" /> 
</subant> 

Файл сборки module1 не имеет цели по умолчанию, указанная:

<?xml version="1.0" encoding="UTF-8"?> 
<project name="module2">  
.. 
.. 

Мое рекомендуются решение указать значение по умолчанию целевой показатель следующим образом:

<project name="module2" default="buildJar">  

Адрес

Поддержка многомодульной сборки и управление зависимостями - это функции, используемые в более современных инструментах построения Java. Если вы пытаетесь структурировать большой проект в ANT, подумайте о том, как работает ivy plugin.

+0

Я получаю ту же ошибку даже после предоставления значения по умолчанию в модуле2. Еще одна вещь, которую следует отметить, это то, что все эхо в build.xml module2 выполняется, и я вижу банку в папке lib. – paary

+0

Перекресток проверял файл JAR, он содержит необходимые файлы классов. Модуль1 build.xml выдает ошибку компиляции, даже если она запускается независимо. Я скопировал java module2 в lib перед выполнением ANT. – paary