Pregunta ¿Cómo puedo construir múltiples proyectos en Ant con un archivo de compilación?


¿Puedo construir múltiples proyectos desde un archivo de compilación? Ejemplo:

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

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

Actualmente escribo ant -f build1.xml compile y construye mi aplicación y tengo que usar dos archivos de compilación separados. ¿Hay alguna forma de que se ejecute de manera que tenga ambos proyectos definidos como un archivo de compilación común y puedo escribir algo así como ant app1 compile o ant app2 compile?

Así es como se ve mi archivo de compilación:

<?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>

Gracias.


15
2018-01-19 10:04


origen


Respuestas:


Sí, puede crear un archivo default.build (de esta manera no necesita especificar el archivo, porque se usa de manera predeterminada). En él puede crear los siguientes objetivos:

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

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

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

De esta forma, puede usar ambos archivos ant desde un único archivo.

Y puede hacer todo en un solo archivo, si reemplaza los objetivos app1 y app2, con los objetivos necesarios para compilarlos que tiene en los archivos separados.

EDITADO:

Tienes diferentes formas de incluirlas en un solo archivo, quizás la más fácil sea incluir un sufijo para cada proyecto en cada objetivo. Y puede llamar al objetivo del proyecto específico o al objetivo para ambos.

Le pongo un ejemplo con el objetivo de compilación (y también para el objetivo init).

Puede usar compilar para compilar ambos proyectos (llamo al otro proyecto otro), y compileazeboster para compilar el proyecto azeboster.

Puede buscar las cosas comunes para evitar el código duplicado innecesario (rutas comunes, objetivos, etc.)

<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>

16
2018-01-19 10:12



Probablemente podrá hacer lo que quiera usando macros (aunque depende precisamente de lo que es común entre sus dos proyectos), aunque es más probable que su comando sea

ant compile app1

o

ant compile app2

donde compilar es un objetivo que llama a una macro, usando app1 / app2 como parámetro para decidir a qué macro llamar o pasar a la macro misma.


0
2018-01-19 10:12



Me gustaría agregar a la excelente respuesta de Borja algunos pasos importantes.

¿Cómo organizar los archivos comunes de hormigas?

Digamos que tenemos un proyecto grande que consiste en muchos proyectos de Eclipse. Todos ellos están en una carpeta de espacio de trabajo. Por lo tanto, el espacio de trabajo en sí mismo crea el Proyecto global. (Observe la diferencia P / p). Muy a menudo ya tiene un archivo de compilación Ant en la carpeta del espacio de trabajo. O ha creado usted mismo los archivos ant (build y properties) comunes.

Más tarde, desea iniciar ese archivo de compilación global. ¿Cómo? ¿Desea ir a la carpeta del espacio de trabajo, cambiar a la línea de comandos o ventana del shell y ejecutar la hormiga desde allí, tener el resultado en la consola externa y cambiar de Eclipse a esa ventana y viceversa? Y el mismo problema para editar? Tener dos ventanas adicionales? No, seguramente quiera tener todas las ventanas, edición y salida, en Eclipse. Pero, ¿cómo podemos hacer referencia a esos archivos de compilación global desde dentro de Eclipse?

  • Ir Package Explorer.
  • Haga un proyecto vacío (no uno de Java), asígnele el nombre _Global (queremos verlo siempre en la parte superior).
  • Haga clic derecho en su nombre. Escoger Import -> General -> Sistema de archivos.
  • prensa Advanced. Comprobar Create links in Workspace, Create virtual folders, create link locations. El último elige para WORKSPACE_LOC.
  • En From Directory vaya al espacio de trabajo o donde ha creado la construcción común. Después de todo, podría ser incluso el más común para varios espacios de trabajo.
  • Verá un diálogo con los nombres de archivo a la derecha con checkfields. Verifique los archivos que necesita. (Necesitará importar cada nuevo archivo común que haya creado posteriormente).
  • Finish.

Ahora verá su proyecto con referencias a los archivos globales. En cuanto a los archivos de propiedades, estás listo. Pero para los archivos de compilación necesita algunos pasos más:

  • Haga clic derecho en su archivo de compilación global, -> Run -> Run Configurations. Estás en el grupo de configuraciones Ant Build.
  • presione el New Launch Configuration botón con más en él (arriba de la lista de configuraciones de inicio). Ahora tiene la configuración de ejecución para esa compilación global.
  • Establezca sus parámetros y ejecútelo / depúrelo.

0
2017-12-17 08:51