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


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>

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>

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

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.


-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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.