Como adicionar um diretório de origem extra para o maven compilar e incluir no jar de construção?


95

Além de src / main / java, estou adicionando um diretório src / bootstrap que desejo incluir em meu processo de construção, em outras palavras, quero que o maven compile e inclua os códigos-fonte lá em minha construção. Quão!?


Pergunta simples: por que não mover o código-fonte para src / main / java? Ou crie um projeto / módulo maven separado que contenha o código e defina-o como dependência.
khmarbaise de

7
No meu caso, preciso adicionar uma pasta de fontes geradas, que prefiro residir dentro do destino.
djjeck

Como alternativa, pode-se querer colocar testes de integração em diretórios diferentes dos src/{main,test}/contados aqui
y2k-shubham

Isso também foi discutido aqui: stackoverflow.com/q/270445/1061929
bjmi

Respostas:


144

Você pode usar o Build Helper Plugin , por exemplo:

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

1
O eclipse realmente reconhece essa pasta como uma pasta buildpathpara qualquer pessoa? porque não para mim. FWIW, eu uso m2epara importar o projeto.
mystarrocks

Ótima resposta, só para esclarecer, você deve substituir seu maven-compiler-plugin pelas linhas acima ...
Colin

Funciona no IntelliJ também.
Alexander Klimetschek de

1
O Eclipse me pediu para instalar um plug-in para m2e, o conector auxiliar de construção. Eu fiz isso e o erro do ciclo de vida desapareceu.
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)recebendo este erro
Katie de

35
NOTA: Esta solução irá apenas mover os arquivos fonte java para o diretório target / classes e não irá compilar os fontes.

Atualize o pom.xmlcomo -

<project>   
 ....
    <build>
      <resources>
        <resource>
          <directory>src/main/config</directory>
        </resource>
      </resources>
     ...
    </build>
...
</project>

2
O NetBeans captou como um encanto :)
Attila

1
Parece que você precisa remover a ** exclusão da pasta adicionada no caminho de construção do Eclipse, embora :(
Dormouse

@Dormouse você pode explicar por favor?
Saikat

1
Não funciona com o IntelliJ, ele será visto <resource>como uma pasta "Resource", mas não como uma pasta "Source", por exemplo, não compilará os arquivos-fonte Java dentro deles.
Alexander Klimetschek de

4
Esta solução irá apenas mover os arquivos fonte java para o diretório target / classes e não irá compilar os fontes
Stefan Haberl

12

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

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

Veja também

Maven compila com vários diretórios src


7
Isso substitui o diretório src / main / java padrão. Se quiser vários diretórios, você também deve especificar o diretório padrão.
Natix

2
A questão é como adicionar vários diretórios de origem e você está propondo um método para adicionar apenas um diretório de origem, que é o oposto do que é solicitado.
João Matos

1

Com as versões recentes do Maven (3) e a versão recente do plug-in do compilador maven (3.7.0), noto que adicionar uma pasta de origem com o build-helper-maven-pluginnão é necessário se a pasta que contém o código-fonte a ser adicionado à compilação estiver localizada no targetpasta ou uma subpasta dela.
Parece que o plugin do compilador maven compila qualquer código-fonte java localizado dentro desta pasta, seja qual for o diretório que os contém.
Por exemplo, tendo alguns (gerado ou não) em código fonte target/a, target/generated-source/fooserá compilado e adicionado na OutputDirectory: target/classes.


-1

Você pode adicionar os diretórios para o seu processo de construção, como:

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

O src / main / java é o caminho padrão que não precisa ser mencionado no pom.xml


2
Por que as pessoas votam negativamente? Basicamente, a mesma resposta de saiky0 (que tem votos positivos), mas anterior?
Friso

15
@Friso porque não está correto. Adicionar um diretório de recursos adicionará recursos (arquivos copiados target/classes, mas não compilados). Esta pergunta é sobre a adição de um diretório de origem, que detém os arquivos que serão compilados em target/classes, não copiado.
Darth Android
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.