¿Cómo agregar un directorio de origen adicional para que maven lo compile e incluya en el contenedor de compilación?

95

Además de src / main / java, estoy agregando un directorio src / bootstrap que quiero incluir en mi proceso de compilación, en otras palabras, quiero que maven compile e incluya las fuentes allí en mi compilación. ¿¡Cómo!?

chrisapotek
fuente
Pregunta simple: ¿Por qué no mover el código fuente a src / main / java? O cree un proyecto / módulo de maven separado que contenga el código y defínalo como dependencia.
Khmarbaise
7
En mi caso, necesito agregar una carpeta de fuentes generadas, que prefiero que resida dentro del objetivo.
djjeck
Alternativamente, uno podría querer colocar pruebas de integración en directorios que no sean los src/{main,test}/que se
indican
Esto también se ha discutido aquí: stackoverflow.com/q/270445/1061929
bjmi

Respuestas:

144

Puede utilizar el complemento Build Helper , por ejemplo:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>some directory</source>
                ...
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
Péter Török
fuente
1
¿Eclipse realmente reconoce una carpeta como una de las buildpathde alguien? porque no es así para mí. FWIW, utilizo m2epara importar el proyecto.
mystarrocks
Gran respuesta, solo para aclarar, debe reemplazar su maven-compiler-plugin con las líneas de arriba ...
Colin
También funciona en IntelliJ.
Alexander Klimetschek
1
Eclipse me pidió que instalara un complemento para m2e, el conector auxiliar de compilación. Lo hice y el error del ciclo de vida desapareció.
Alexis Dufrenoy
1
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.7:add-source (execution: add-source, phase: generate-sources)recibiendo este error
Katie
35
NOTA: Esta solución simplemente moverá los archivos fuente de Java al directorio target / classes y no compilará las fuentes.

Actualizar el pom.xmlcomo -

<project>   
 ....
    <build>
      <resources>
        <resource>
          <directory>src/main/config</directory>
        </resource>
      </resources>
     ...
    </build>
...
</project>
Saikat
fuente
2
NetBeans lo recogió como un encanto :)
Attila
1
Sin embargo, parece que necesita eliminar la ** exclusión de la carpeta agregada en la ruta de compilación de Eclipse :(
Dormouse
@Dormouse, ¿puedes explicarme por favor?
Saikat
1
No funciona con IntelliJ, se verá <resource>como carpeta "Recurso" pero no como carpeta "Fuente", por ejemplo, no compilará archivos fuente Java dentro de ellos.
Alexander Klimetschek
4
Esta solución simplemente moverá los archivos fuente de Java al directorio target / classes y no compilará las fuentes
Stefan Haberl
12

http://maven.apache.org/guides/mini/guide-using-one-source-directory.html

<build>
<sourceDirectory>../src/main/java</sourceDirectory>

ver también

Maven compila con múltiples directorios src

Kalpesh Soni
fuente
7
Esto anula el directorio src / main / java predeterminado. Si desea varios directorios, también debe especificar el predeterminado.
Natix
2
La pregunta es cómo agregar varios directorios de origen y está proponiendo un método para agregar solo un directorio de origen, que es lo opuesto a lo que se pregunta.
João Matos
1

Con las versiones recientes de Maven (3) y la versión reciente del complemento del compilador de Maven (3.7.0), noto que build-helper-maven-pluginno es necesario agregar una carpeta de origen con el si la carpeta que contiene el código fuente para agregar en la compilación se encuentra en el targetcarpeta o una subcarpeta de la misma.
Parece que el complemento del compilador maven compila cualquier código fuente de Java ubicado dentro de esta carpeta, sea cual sea el directorio que lo contiene.
Por ejemplo tener algunos (generado o no) el código fuente en target/a, target/generated-source/foose compilan y se añaden en el OutputDirectory: target/classes.

davidxxx
fuente
-1

Puede agregar los directorios para su proceso de construcción como:

    ...
   <resources>
     <resource>
       <directory>src/bootstrap</directory>
     </resource>
   </resources>
   ...

Src / main / java es la ruta predeterminada que no es necesario mencionar en pom.xml

Arun
fuente
2
¿Por qué la gente vota en contra? Básicamente, la misma respuesta que la de saiky0 (que tiene votos positivos) pero antes.
Viernes
15
@Friso porque no es correcto. Agregar un directorio de recursos agregará recursos (archivos copiados target/classes, pero no compilados). Esta pregunta se refiere a la adición de un directorio de origen, que contiene los archivos que se compilan en target/classes, no se han copiado.
Darth Android