Bagaimana cara menambahkan direktori sumber tambahan agar maven dapat dikompilasi dan dimasukkan ke dalam build jar?

95

Selain src / main / java, saya menambahkan direktori src / bootstrap yang ingin saya sertakan dalam proses build saya, dengan kata lain, saya ingin maven mengkompilasi dan memasukkan source yang ada di build saya. Bagaimana!?

chrisapotek.id
sumber
Pertanyaan sederhana: Mengapa tidak memindahkan kode sumber ke src / main / java? Atau buat proyek / modul maven terpisah yang berisi kode dan tentukan sebagai ketergantungan.
khmarbaise
7
Dalam kasus saya, saya perlu menambahkan folder sumber yang dihasilkan, yang saya lebih suka berada di dalam target.
djjeck
Atau, satu mungkin ingin tempat integrasi-tes di direktori selain src/{main,test}/seperti yang diceritakan di sini
y2k-shubham
Ini juga telah dibahas di sini: stackoverflow.com/q/270445/1061929
bjmi

Jawaban:

144

Anda dapat menggunakan Plugin Build Helper , misalnya:

<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
sumber
1
Apakah eclipse benar-benar mengenali folder seperti itu sebagai salah satu folder buildpathuntuk semua orang? 'cos itu tidak untuk saya. FWIW, saya gunakan m2euntuk mengimpor proyek.
mystarrocks
Jawaban yang bagus, hanya untuk memperjelas, Anda harus mengganti maven-compiler-plugin Anda dengan baris-baris dari atas ...
Colin
Bekerja di IntelliJ juga.
Alexander Klimetschek
1
Eclipse meminta saya memasang plugin untuk m2e, konektor pembantu build. Saya melakukannya, dan kesalahan siklus hidup hilang.
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)mendapatkan kesalahan ini
Katie
35
CATATAN: Solusi ini hanya akan memindahkan file sumber java ke direktori target / kelas dan tidak akan mengkompilasi sumber.

Perbarui pom.xmlsebagai -

<project>   
 ....
    <build>
      <resources>
        <resource>
          <directory>src/main/config</directory>
        </resource>
      </resources>
     ...
    </build>
...
</project>
Saikat
sumber
2
NetBeans mengambilnya seperti pesona :)
Attila
1
Tampaknya Anda memang perlu menghapus ** pengecualian untuk folder yang ditambahkan pada jalur build Eclipse :(
Dormouse
@Dormouse dapatkah Anda menjelaskan?
Saikat
1
Tidak bekerja dengan IntelliJ, ini akan terlihat <resource>sebagai folder "Resource" tetapi bukan sebagai folder "Source", misalnya ia tidak akan mengkompilasi file sumber Java di dalamnya.
Alexander Klimetschek
4
Solusi ini hanya akan memindahkan file sumber java ke direktori target / kelas dan tidak akan mengkompilasi sumber
Stefan Haberl
12

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

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

juga lihat

Kompilasi Maven dengan beberapa direktori src

Kalpesh Soni
sumber
7
Ini menggantikan direktori src / main / java default. Jika Anda menginginkan banyak direktori, Anda juga harus menentukan direktori default.
Natix
2
Pertanyaannya adalah bagaimana menambahkan beberapa direktori sumber dan Anda mengusulkan metode untuk menambahkan hanya satu direktori sumber, yang berlawanan dengan yang diminta.
João Matos
1

Dengan versi Maven terbaru (3) dan versi terbaru dari plugin compiler maven (3.7.0), saya perhatikan bahwa menambahkan folder sumber dengan build-helper-maven-plugintidak diperlukan jika folder yang berisi kode sumber untuk ditambahkan dalam build terletak di targetfolder atau subfoldernya.
Tampaknya plugin compiler maven mengkompilasi kode sumber java apa pun yang terletak di dalam folder ini apa pun direktori yang berisi mereka.
Misalnya memiliki beberapa (yang dihasilkan atau tidak) kode sumber di target/a, target/generated-source/fooakan disusun dan ditambahkan dalam outputDirectory yang: target/classes.

davidxxx
sumber
-1

Anda dapat menambahkan direktori untuk proses build Anda seperti:

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

Src / main / java adalah jalur default yang tidak perlu disebutkan di pom.xml

Arun
sumber
2
Mengapa orang-orang yang tidak disukai? Pada dasarnya jawaban yang sama dengan saiky0 (yang memiliki suara positif) tetapi sebelumnya?
Friso
15
@Friso karena itu tidak benar. Menambahkan direktori sumber daya akan menambahkan sumber daya (file disalin ke target/classes, tetapi tidak dikompilasi). Pertanyaan ini adalah tentang menambahkan direktori sumber, yang memegang file yang akan dikompilasi ke dalam target/classes, tidak disalin.
Darth Android