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.