2012-01-04 18 views
14

Estoy trabajando en un motor de blog muy simple en Java para aprender múltiples tecnologías.¿Cómo incluir correctamente las fuentes de Java en Maven?

Tecnología: Spring IoC, Hibernate, jUnit, GWT y Maven.

creé dos proyectos Maven: un proyecto de núcleo y un proyecto GWT (que tiene una referencia en el núcleo de uno)

Código es accesible en https://github.com/LaurentT/BlogEngineCore

Mi objetivo es el siguiente: quiero incluir Fuentes Java y XML, ya que mi proyecto GWT va a necesitar las fuentes Java para compilarlo en JavaScript.

He intentado utilizar el siguiente código en el elemento <build>:

 <resources> 
     <resource> 
      <directory>src/main/java</directory> 
      <includes> 
       <include>**/*.java</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <includes> 
       <include>**/*.*xml</include> 
       <include>**/*.*properties</include> 
      </includes> 
     </resource> 
    </resources> 

Mis pruebas JUnit utilizados para pasar y meta antes de que se agregue pero ahora ni siquiera están terminando están colgando ...

No tengo idea de lo que está pasando, así que quiero saber si hay otras formas de incluir fuentes Java o si lo estoy haciendo mal.

¿Alguna pista?

+0

¿por qué cree "pruebas junit están colgando" tiene algo que ver con la inclusión de las fuentes de Java ? – milan

+0

Es solo que si elimino esas líneas, mis pruebas terminan y pasan. No sé por qué, pero eso es lo que hace :( –

Respuesta

11

intente incluir el $ {basedir} delante de la ruta del directorio.

<resource> 
    <directory>${basedir}/src/main/java</directory> 
</resource> 
+0

La solución de Sean fue buena si quería tener dos JAR separados, pero aquí, dado que mi proyecto GWT está cargando un jar (el proyecto central), realmente necesito cargar un JAR en el classpath donde puedo encontrar mis fuentes. ¡Esto funcionó como un amuleto! Muchas gracias Mike –

+0

Esto incluirá todos los archivos en tu directorio de origen. Aunque es probable que quieras incluir solo '* .gwt.xml' y fuentes del' cliente 'y' shared' dirs. –

3

puede encontrar cómo configurar experto para el proyecto multimódulo here.

¿Dónde está el archivo * gwt.xml?

Si la etiqueta que se muestra es parte del expediente del proyecto depom.xml núcleo, entonces también debería añadir <include>**/*.gwt.xml</include>:

<resource> 
     <directory>src/main/java</directory> 
     <includes> 
      <include>**/*.java</include> 
      <include>**/*.gwt.xml</include> 
     </includes> 
</resource> 
+0

Esto funcionó para mí, sin embargo tenga cuidado, esto hará que todo en src/main/resources NO se incluya en el jar. Arregle eso simplemente copiando esto y agregando otros recursos para src/main/recursos, incluidas las extensiones/comodines apropiados –

+0

Este ejemplo incluye solo los archivos necesarios para el módulo gwt, que es mejor que incluir ciegamente todo en src dir. ¡Gracias! –

+0

@ClickUpvote eres a la derecha, el ejemplo fue editado para hacerlo más portátil. Ahora es un drop-in. –

21

La forma más limpia experto sería adjuntar un frasco fuente separada.

hay formas estándar para generar en su construcción using the maven source plugin:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-source-plugin</artifactId> 
    <version>2.2.1</version> 
    <executions> 
    <execution> 
     <id>attach-sources</id> 
     <phase>verify</phase> 
     <goals> 
     <goal>jar-no-fork</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Y su proyecto GWT ahora puede hacer referencia a sus fuentes del proyecto de núcleo, además de su proyecto central jar:

<dependency> 
    <groupId>your.project</groupId> 
    <artifactId>core</artifactId> 
    <version>the.same.version</version> 
    <classifier>sources</classifier> 
    <scope>provided</scope><!-- use for compilation only --> 
</dependency> 
+0

¡Muchas gracias! ¿Alguna forma de hacer esto en un solo frasco? ¿O no es un problema? –

+0

@LaurentT mira las otras respuestas para eso. Pero como dije, eso es menos parecido a un maven –

+1

¿Esta respuesta incluye archivos '* .gwt.xml'? –

0

En En contraste con las otras respuestas, mi enfoque copia todos los descriptores de módulo *.gwt.xml y solo los archivos fuente java que están realmente especificados en los descriptores del módulo. Tampoco es necesario que se repita en los descriptores de POM y módulos.

actualización de su pom con:

<plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>gwt-maven-plugin</artifactId> 
      <version>2.7.0</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>resources</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

y su * .gwt.xml

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

    <!-- Specify the paths for translatable code --> 
    <source path='shared' /> 

</module> 

org: Codehaus.mojo: docs GWT-maven-plugin

GWT: recursos
Descripción: Copiar GWT código fuente de Java y el descriptor del módulo como recursos en la construcción OutputDirectory. Alternativa a declarar <resource> en el POM con un filtrado más fino a medida que se lee el descriptor del módulo para detectar las fuentes que se van a copiar.
Implementación: org.codehaus.mojo.gwt.GwtResourcesMojo
Idioma: java
Bound a la fase: procesos de recursos

Cuestiones relacionadas