Как я могу построить несколько проектов в Ant с одним файлом сборки?

Могу ли я построить несколько проектов из одного файла сборки. Пример:

<project basedir="." default="all" name="app1">
    ...
</project>

<project basedir="." default="all" name="app2">
    ...
</project>

В настоящее время я печатаю ant -f build1.xml compile, и он создает мое приложение, и я должен использовать два отдельных файла сборки. Есть ли способ заставить его работать так, что у меня есть оба проекта, которые определяют общий файл сборки, и я могу напечатать что-то вроде ant app1 compile или ant app2 compile?

Вот как выглядит мой файл сборки:

<?xml version="1.0" encoding="UTF-8"?>
<project name="azebooster" default="dist" basedir=".">

    <!-- Globals -->
    <property name="src" location="src/com/aelitis"/>
    <property name="build" location="build/azebooster"/>
    <property name="jar" location="jar/azebooster"/>
    <property name="resources" location="res/azebooster"/>

    <!-- Paths -->
    <path id="classpath">
        <fileset dir="." includes="**/*.jar"/>
    </path>

    <!-- Start it -->
    <target name="init">
      <tstamp/>
      <mkdir dir="${build}"/>
      <mkdir dir="${jar}"/>
    </target>

    <!-- Build it -->
    <target name="compile" depends="init" description="compile the source" >
        <javac srcdir="${src}" destdir="${build}">
            <classpath>
                <path refid="classpath"/>
            </classpath>
        </javac>
    </target>

    <!-- Jar it -->
    <target name="jar" depends="compile">
        <jar destfile="${jar}/${ant.project.name}.jar">
            <fileset dir="${build}"/>
            <fileset dir="${resources}" />
        </jar>
    </target>

    <!-- Clean it -->
    <target name="clean" description="clean up" >
        <tstamp/>
        <delete dir="${build}"/>
        <delete dir="${jar}"/>
    </target>

</project>

Спасибо.

Ответы

Ответ 1

Да, вы можете создать файл default.build(таким образом вам не нужно указывать файл, потому что он используется по умолчанию). На нем вы можете создать следующие цели:

<target name="all" depends="app1, app2" />

<target name="app1">
    <ant antfile=<app1file> target="compile" />        
</target>

<target name="app2">
    <ant antfile=<app2file> target="compile" />        
</target>

На этом пути вы можете использовать оба файла ant из одного уникального файла.

И вы можете сделать все только в одном файле, если вы замените цели app1 и app2, с необходимыми целями, чтобы скомпилировать их, которые у вас есть в отдельных файлах.

Редакция:

У вас есть разные способы включить оба из них только в один файл, возможно, самый простой из них включает суффикс для каждого проекта для каждой цели. И вы можете вызвать конкретную цель проекта или цель для обоих.

Я приведу пример с целью компиляции (и для цели init).

Вы можете использовать компиляцию для компиляции обоих проектов (я называю другой проект другим) и compileazeboster для компиляции проекта azeboster.

Вы можете искать общие вещи, чтобы избежать обычного дублированного кода (общие пути, цели и т.д.)

<property name="srcazebooster" location="src/com/aelitis"/>
<property name="buildazebooster" location="build/azebooster"/>
<property name="jarazebooster" location="jar/azebooster"/>
<property name="srcother" location="src/other"/>
<property name="buildother" location="build/other"/>
<property name="jarother" location="jar/other"/>


<!-- Start it -->
<target name="init" depends="initazebooster, initother"/>

<!-- Build it -->
<target name="compile" depends="compileazebooster, compileother" description="compile the source for all" />



<!-- Start azebooster-->
<target name="initazebooster">
    <tstamp/>
    <mkdir dir="${buildazebooster}"/>
    <mkdir dir="${jarazebooster}"/>
</target>

<!-- Build azeboster-->
<target name="compileazebooster" depends="initazebooster" description="compile the source for azebooster" >
    <javac srcdir="${srcazebooster}" destdir="${buildazebooster}">
        <classpath>
            <path refid="classpath"/>
        </classpath>
    </javac>
</target>

<!-- Start other-->
<target name="initother">
    <tstamp/>
    <mkdir dir="${buildotherr}"/>
    <mkdir dir="${jarother}"/>
</target>

<!-- Build other-->
<target name="compileother" depends="initother" description="compile the source for other" >
    <javac srcdir="${srcother}" destdir="${buildother}">
        <classpath>
            <path refid="classpath"/>
        </classpath>
    </javac>
</target>

Ответ 2

Вы, вероятно, сможете делать то, что хотите, используя макросы (хотя это зависит именно от того, что является общим для ваших двух проектов), хотя ваша команда с большей вероятностью будет

ant compile app1

или

ant compile app2

где компиляция - это цель, которая вызывает макрос, используя app1/app2 в качестве параметра, чтобы решить, какой макрос вызывать или передать сам макрос.

Ответ 3

Я хотел бы добавить к замечательному ответу Борхи некоторые важные шаги.

Как организовать общие ant файлы?

Скажем, у нас есть большой проект, состоящий из многих проектов Eclipse. Все они находятся в папке с пространством. Таким образом, сама рабочая область делает глобальный проект. (Разница P/p извещения). Очень часто у вас уже есть файл сборки ant в папке рабочего пространства. Или вы сами создали общие файлы ant (сборка и свойства).

Позже вы хотите запустить этот файл глобальной сборки. Как? Вы хотите войти в папку рабочей области, перейти в командную строку или окно оболочки и запустить там ant, с выходом на внешней консоли и переключением с Eclipse на это окно и обратно? И та же проблема для редактирования? Есть два дополнительных окна? Нет, конечно, вы хотите иметь все окна, редактировать и выводить в Eclipse. Но как мы можем ссылаться на эти глобальные файлы сборки из Eclipse?

  • Перейдите к Package Explorer.
  • Создайте пустой проект (а не Java), дайте ему имя _Global (мы хотим видеть его всегда сверху).
  • Щелкните правой кнопкой мыши его имя. Выберите Import → Общие → Файловая система.
  • Нажмите Advanced. Проверьте Create links in Workspace, Create virtual folders, create link locations. Последние выбирают для WORKSPACE_LOC.
  • В From Directory перейдите в рабочую область или где вы создали общую сборку. В конце концов, это может быть даже обычным для нескольких рабочих пространств.
  • Вы увидите диалог с именами файлов справа с помощью полей checkfields. Проверьте файлы, которые вам нужны. (Вам нужно будет импортировать каждый новый общий файл, который вы создали после этого).
  • Finish.

Теперь вы видите свой проект со ссылками на глобальные файлы. Что касается файлов свойств, вы готовы. Но для файлов сборки вам нужны еще несколько шагов:

  • Щелкните правой кнопкой мыши ваш глобальный файл сборки, → RunRun Configurations. Вы находитесь в группе конфигураций ant Build.
  • Нажмите кнопку New Launch Configuration с плюсом на ней (над списком конфигураций запуска). Теперь у вас есть конфигурация запуска для этой глобальной сборки.
  • Задайте его параметры и запустите/отлаживайте его.