2010-03-02 12 views
8

Como experimento queremos construir nuestros productos utilizando el compilador de Java Eclipse (ecj-3.5.jar descargado de eclipse.org) en la versión de ejecución de Java 6 en lugar del JDK , y tal como lo entiendo, es una cuestión de agregar este jar al classpath de hormigas y establecer la propiedad build.compiler para que apunte al adaptador.especificando el compilador de Eclipse completamente de _within_ build.xml

Al incluir

<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> 

en mi build.xml e invocando hormiga con un JRE, me sale el error esperado que el adaptador no se puede encontrar, y añadiendo ecj-3.5.jar a la ruta de clase en el Panel Eclipse Puedo compilar mi código como se esperaba. Creo que la misma funcionalidad estará disponible con "-ib foo.jar" desde la línea de comandos con hormigas modernas.

Ahora, deseo especificar desde dentro de build.xml que quiero que ecj-3.5.jar en mi ruta de clase satisfaga lo mismo que el anterior. Ya podemos hacer esto con tareas de hormiga, así que creo que es posible.

Entonces la pregunta es: ¿Cómo puedo agregar al classpath utilizado por javac para localizar el compilador solo desde build.xml?


Parece que la próxima ant4eclipse 1.0 incluye el compilador Eclipse (que es lo que quería utilizar esto para), por lo que mediante la actualización a que (de 0.5) debería resolver el problema que tenemos.


24/10/2010: Ant4Eclipse está todavía en M4 sin indicación de cuándo ocurrirá el lanzamiento.


11-01-2011: ahora hemos migrado de hormiga a maven. Los scripts build.xml tocan el muro de complejidad y se necesita un nuevo enfoque. Cualquiera que necesite elegir qué hacer, no vaya por la ruta ant4eclipse, excepto para proyectos triviales.


30/11/2011: un año después, la experiencia Maven sigue siendo buena en su mayoría. Hay muchas peculiaridades y cambios en la mentalidad, pero la mayoría tiene sentido en el contexto. Maven puede especificar el nivel de compilador en proyectos individuales fácilmente. Estamos buscando usar ecj en lugar de javac (por varias razones), pero para la mayoría de los propósitos, javac funciona muy bien.

Respuesta

11

Una forma es especificar una referencia a un componentedef cuando se usa javac.

<componentdef name="ecj" 
       classname="org.eclipse.jdt.core.JDTCompilerAdapter" 
       classpath="ecj-3.7.1.jar" /> 

<javac ....> 
    <ecj/> 
</javac> 

Otra opción es establecer build.compiler y cuando tenga el atributo o compilador para javac y luego especificar un compilerclasspath para javac. Esta es una ruta de acceso similar a la estructura para mantener el classpath para cargar su adaptador de compilador.

<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter" ....> 
    <compilerclasspath> 
    ... 
    </compilerclasspath> 
</javac> 

Consulte la documentación javac task en el manual de hormiga para más detalles. Tenga en cuenta que estas dos soluciones solo funcionan desde Ant 1.8 en adelante.

+0

Con la hormiga enviada con Eclipse 3.5 (probablemente 1.7) me aparece "Problema: no se pudo crear la tarea o escribir componentdef". Otro mensaje de error es classpath relacionado con horm 1.8, pero realmente agradecería una solución que funcione desde dentro de Eclipse. –

+0

Agregué otra opción para Ant 1.8 pero no veo cómo podrías hacerlo con 1.7 – Mark

1

Lectura Running Ant via Java. Creo que puede escribir un contenedor simple que establezca correctamente una ruta de clase y agregue su archivo jar a la ruta de clase resultante.

Aquí estoy cortando y pegando la muestra desde el enlace anterior con la adición de la biblioteca que le interesa a la ruta de clase:

<java 
     classname="org.apache.tools.ant.launch.Launcher" 
     fork="true" 
     failonerror="true" 
     dir="${sub.builddir}" 
     timeout="4000000" 
     taskname="startAnt" 
> 
    <classpath> 
     <pathelement location="${ant.home}/lib/ant-launcher.jar"/> 
     <pathelement location="/path/to/ecj-3.5.jar"/> 
    </classpath> 
    <arg value="-buildfile"/> 
    <arg file="${sub.buildfile}"/> 
    <arg value="-Dthis=this"/> 
    <arg value="-Dthat=that"/> 
    <arg value="-Dbasedir=${sub.builddir}"/> 
    <arg value="-Dthe.other=the.other"/> 
    <arg value="${sub.target}"/> 
</java> 

Creo que incluso se puede volver a utilizar el mismo archivo de creación, solo dale un objetivo diferente como punto de entrada.

+0

Estás sugiriendo relanzar hormiga con una ruta de clase revisada. Realmente evitaría el paso de relanzamiento. –

Cuestiones relacionadas