Wie füge ich ein zusätzliches Quellverzeichnis hinzu, das Maven kompilieren und in das Build-Jar aufnehmen kann?


95

Zusätzlich zu src / main / java füge ich ein src / bootstrap-Verzeichnis hinzu, das ich in meinen Erstellungsprozess aufnehmen möchte. Mit anderen Worten, ich möchte, dass maven die dortigen Quellen kompiliert und in meinen Build einbezieht. Wie!?


Einfache Frage: Warum nicht den Quellcode nach src / main / java verschieben? Oder erstellen Sie ein separates Maven-Projekt / Modul, das den Code enthält, und definieren Sie ihn als Abhängigkeit.
Khmarbaise

7
In meinem Fall muss ich einen generierten Quellordner hinzufügen, der sich lieber im Ziel befindet.
Djjeck

Alternativ könnte man Integrationstests in andere Verzeichnisse src/{main,test}/als die hier beschriebenen stellen wollen
y2k-shubham

Dies wurde auch hier besprochen: stackoverflow.com/q/270445/1061929
bjmi

Antworten:


143

Sie können das Build Helper Plugin verwenden , z.

<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
Erkennt Eclipse einen solchen Ordner wirklich als einen der Ordner buildpathfür irgendjemanden? Weil es nicht für mich ist. FWIW, ich verwende m2e, um das Projekt zu importieren.
Mystarrocks

Tolle Antwort, nur um zu verdeutlichen, sollten Sie Ihr Maven-Compiler-Plugin durch die Zeilen von oben ersetzen ...
Colin

Funktioniert auch in IntelliJ.
Alexander Klimetschek

1
Eclipse hat mich gebeten, ein Plugin für m2e, den Build Helper Connector, zu installieren. Ich habe es getan und der Lebenszyklusfehler ist verschwunden.
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)diesen Fehler bekommen
Katie

35
HINWEIS: Diese Lösung verschiebt nur die Java-Quelldateien in das Verzeichnis target / classes und kompiliert die Quellen nicht.

Aktualisieren Sie das pom.xmlas -

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

2
NetBeans nahm es wie ein Zauber auf :)
Attila

1
Anscheinend müssen Sie den ** Ausschluss für den hinzugefügten Ordner im Eclipse-Erstellungspfad entfernen :(
Dormouse

@ Siebenschläfer kannst du das bitte erklären?
Saikat

1
Funktioniert nicht mit IntelliJ, es wird <resource>als "Ressourcen" -Ordner angezeigt, aber nicht als "Quell" -Ordner, z. B. werden darin keine Java-Quelldateien kompiliert.
Alexander Klimetschek

4
Diese Lösung verschiebt nur die Java-Quelldateien in das Verzeichnis target / classes und kompiliert die Quellen nicht
Stefan Haberl

12

7
Dies überschreibt das Standardverzeichnis src / main / java. Wenn Sie mehrere Verzeichnisse möchten, müssen Sie auch das Standardverzeichnis angeben.
Natix

2
Die Frage ist, wie mehrere Quellverzeichnisse hinzugefügt werden, und Sie schlagen eine Methode vor, um nur ein Quellverzeichnis hinzuzufügen. Dies ist das Gegenteil von dem, was gefragt wird.
João Matos

1

Bei den neuesten Maven-Versionen (3) und der neuesten Version des Maven-Compiler-Plugins (3.7.0) ist das Hinzufügen eines Quellordners mit dem build-helper-maven-pluginnicht erforderlich, wenn sich der Ordner mit dem im Build hinzuzufügenden Quellcode im befindet targetOrdner oder ein Unterordner davon.
Es scheint, dass das Compiler-Maven-Plugin jeden Java-Quellcode in diesem Ordner kompiliert, unabhängig davon, in welchem ​​Verzeichnis sie sich befinden.
Wenn beispielsweise ein (generierter oder kein) Quellcode enthalten ist target/a, target/generated-source/foowird dieser kompiliert und im outputDirectory hinzugefügt : target/classes.


-1

Sie können die Verzeichnisse für Ihren Erstellungsprozess wie folgt hinzufügen:

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

Src / main / java ist der Standardpfad, der in der Datei pom.xml nicht erwähnt werden muss


2
Warum stimmen die Leute ab? Grundsätzlich die gleiche Antwort wie bei saiky0 (die positive Stimmen hat), aber früher?
Friso

15
@Friso weil es nicht richtig ist. Durch Hinzufügen eines Ressourcenverzeichnisses werden Ressourcen hinzugefügt (Dateien, die kopiert target/classes, aber nicht kompiliert wurden). Diese Frage bezieht sich auf ein Quellverzeichnis hinzugefügt, die Dateien enthält , die werden kompiliert in target/classes, nicht kopiert.
Darth Android
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.