compilando solo una parte del árbol fuente con la hormiga

votos
8

Digamos que tengo mis fuentes en mi src / tree (y posiblemente en mi prueba / árbol). Digamos que me gustaría compilar solo una parte de ese árbol. Las razones por las que podría querer hacer eso son varias. Solo como ejemplo, podría querer crear el jar más pequeño posible (sin incluir ciertas clases), o podría querer el tiempo de compilación más rápido para lo que estoy compilando. ¡Sin embargo, absolutamente quiero compilar todas las dependencias!

Esto se puede lograr fácilmente desde la línea de comando con:

javac -d build/ -cp whatever -sourcepath src src/path/to/MyClass.java

Ahora, ¿cómo puedes hacer eso con la hormiga? La tarea javac ant compila todo :

El directorio de origen y destino se analizará recursivamente para que los archivos fuente Java se compilen.

Uno puede usar los parámetros excludesy includes, pero son problemáticos para este propósito. De hecho, parece que uno tiene que configurar explícitamente todo includes(no la búsqueda de dependencia automática), e incluso peor que excluye tiene prioridad en incluye :

Cuando se usan inclusión y exclusión, solo se utilizan archivos / directorios que coinciden con al menos uno de los patrones de inclusión y no coinciden con ninguno de los patrones de exclusión.

Por lo tanto, no puedes usar

<javac srcdir=${src.dir} destdir=${build.dir} classpathref=classpath
            excludes=**/*.java includes=src/path/to/MyClass.java />  

Porque no compilará nada :-(

¿Hay alguna forma de lograr esa simple línea de comando javaccon hormiga?


EDITADO: Gracias por su respuesta, Sadie, lo estoy aceptando, porque funciona de la manera que me preguntaba en esta pregunta. Pero tengo un par de comentarios (demasiado tiempo para estar en el campo de comentarios de tu respuesta):

1) Leí la documentación (ver los enlaces más arriba), pero no está claro que solo includestú también excluyas todo lo demás

2) Cuando solo te includesregistra algo como

[javac] Compiling 1 source file to /my/path/to/build

incluso si las dependencias lo hacen compilando (mucho) más que un solo archivo fuente.

Publicado el 14/10/2008 a las 22:14
por usuario
En otros idiomas...                            


4 respuestas

votos
0

En realidad, hormona solo verifica todo, si ejecuta una compilación dos veces seguidas notará que la segunda es mucho más rápida. En realidad, puede persuadirse fácilmente de extrañar cosas.

Si ni siquiera quiere que considere todo, tendrá que descomponerlo en módulos / proyectos / árboles fuente más pequeños para que le explique explícitamente qué compilar.

Respondida el 15/10/2008 a las 00:51
fuente por usuario

votos
12

¿Por qué excluyes y también incluyes? Si tiene al menos una inclusión, los archivos solo se compilan si están incluidos explícitamente. Entonces esto debería funcionar:

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"
        includes="src/path/to/MyClass.java" />

O más flexiblemente:

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath">
    <include name="src/path/to/MyClass.java"/>
    <include name="src/path/to/AnotherClass.java"/>
</javac>

Para incluir solo ciertos paquetes o clases en un jar, use un atributo de conjunto de archivos

<jar jarfile="${outlib}/something.jar">
    <fileset dir="${build.dir}">
        <include name='src/path/to/classes' />
    </fileset>
</jar>

Nuevamente, puede usar múltiples inclusiones para combinar paquetes separados. Experimente con incluye y lea la documentación y seguramente encontrará la respuesta que necesita.

Respondida el 15/10/2008 a las 01:39
fuente por usuario

votos
0

Sólo dar sólo la lista coma separados de los archivos que desea construir. Digamos ejemplo

<property name="includeFileList" value="<name of java class>.java"/>

<javac srcdir="${src.dir}" destdir="${build.dir}"
       target="1.6" debug="true" includes="${includeFileList}"/>

Funcionará.

Respondida el 23/06/2013 a las 12:59
fuente por usuario

votos
2

vieja pregunta, pero yo estaba luchando con el mismo problema y encontrar aa solución más elegante. Así que aquí está, para futuras referencias:

De acuerdo con los documentos de hormigas el <javac>elemento es un implícito <fileset>y como tal puede tener selectores como <filename name="**/MyClass.java"/>, por lo que esto sólo sería compilar MyClass.java:

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath">
  <filename name="**/path/to/MyClass.java"/>
</javac>
Respondida el 12/07/2015 a las 11:54
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more