Jak dodać dodatkowy katalog źródłowy dla mavena do kompilacji i dołączenia do pliku build jar?

95

Oprócz katalogu src / main / java dodaję katalog src / bootstrap, który chcę uwzględnić w procesie kompilacji, innymi słowy, chcę, aby maven skompilował i uwzględnił źródła w mojej kompilacji. W jaki sposób!?

chrisapotek
źródło
Proste pytanie: dlaczego nie przenieść kodu źródłowego do src / main / java? Lub utwórz oddzielny projekt / moduł Mavena, który zawiera kod i zdefiniuj go jako zależność.
khmarbaise
7
W moim przypadku muszę dodać wygenerowany folder ze źródłami, który wolę przebywać wewnątrz celu.
djjeck,
Alternatywnie, można chcesz umieścić integracyjnych testów w katalogach innych niż src/{main,test}/jak powiedziano tutaj
Y2K-Shubham
Zostało to również omówione tutaj: stackoverflow.com/q/270445/1061929
bjmi

Odpowiedzi:

144

Możesz skorzystać z wtyczki Build Helper , np .:

<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
źródło
1
Czy eclipse naprawdę rozpoznaje taki folder jako jeden z nich buildpathdla każdego? bo tak nie jest dla mnie. FWIW, używam m2edo importu projektu.
mystarrocks
Świetna odpowiedź, tylko dla wyjaśnienia, powinieneś zastąpić wtyczkę maven-kompilatora liniami z góry ...
Colin
Działa również w IntelliJ.
Alexander Klimetschek,
1
Eclipse poprosił mnie o zainstalowanie wtyczki do m2e, łącznika pomocniczego w budowaniu. Zrobiłem to i zniknął błąd cyklu życia.
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)otrzymywanie tego błędu
Katie
35
UWAGA: To rozwiązanie po prostu przeniesie pliki źródłowe Java do katalogu target / classes i nie skompiluje źródeł.

Zaktualizuj pom.xmljako -

<project>   
 ....
    <build>
      <resources>
        <resource>
          <directory>src/main/config</directory>
        </resource>
      </resources>
     ...
    </build>
...
</project>
Saikat
źródło
2
NetBeans podniosło to jak urok :)
Attila
1
Wygląda jednak na to, że musisz usunąć wykluczenie ** dla dodanego folderu w ścieżce kompilacji Eclipse :(
Dormouse
@Dormouse czy możesz wyjaśnić?
Saikat,
1
Nie działa z IntelliJ, będzie widoczny <resource>jako folder „Resource”, ale nie jako folder „Source”, np. Nie będzie kompilował w nich plików źródłowych Java.
Alexander Klimetschek,
4
Rozwiązanie to będzie po prostu przenieść pliki źródłowe java do katalogu docelowego / classes i nie skompilować źródła
Stefan Haberl
12

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

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

Zobacz także

Maven kompiluje się z wieloma katalogami src

Kalpesh Soni
źródło
7
Zastępuje to domyślny katalog src / main / java. Jeśli chcesz mieć wiele katalogów, musisz również określić domyślny.
Natix
2
Pytanie brzmi, jak dodać wiele katalogów źródłowych, a ty proponujesz metodę dodawania tylko jednego katalogu źródłowego, co jest przeciwieństwem tego, co jest zadawane.
João Matos
1

W ostatnich wersjach Maven (3) i najnowszej wersji wtyczki kompilatora maven (3.7.0) zauważyłem, że dodanie folderu źródłowego z rozszerzeniem build-helper-maven-pluginnie jest wymagane, jeśli folder zawierający kod źródłowy do dodania w kompilacji znajduje się w targetfolder lub jego podfolder.
Wygląda na to, że wtyczka kompilatora maven kompiluje dowolny kod źródłowy Java znajdujący się w tym folderze, niezależnie od katalogu, który je zawiera.
Na przykład jedne (wytworzone lub nie), kod źródłowy target/a, target/generated-source/foonależy opracować i dodaje się w OutputDirectory: target/classes.

davidxxx
źródło
-1

Możesz dodać katalogi do procesu kompilacji, takie jak:

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

Src / main / java to domyślna ścieżka, której nie trzeba podawać w pom.xml

Bieg
źródło
2
Dlaczego ludzie negatywnie oceniają? Zasadniczo ta sama odpowiedź, co saiky0 (która ma upvotes), ale wcześniej?
Friso
15
@Friso, ponieważ nie jest poprawne. Dodanie katalogu zasobów spowoduje dodanie zasobów (pliki skopiowane target/classes, ale nieskompilowane). To pytanie jest o dodanie katalogu źródłowego, który przechowuje pliki, które zostaną skompilowane na target/classesnie skopiowane.
Darth Android