Derlemek ve derleme kavanozuna eklemek için maven için fazladan bir kaynak dizini nasıl eklenir?


96

Src / main / java'ya ek olarak, derleme sürecime dahil etmek istediğim bir src / bootstrap dizini ekliyorum, başka bir deyişle, maven'in derlemesini ve oradaki kaynakları derlememe dahil etmesini istiyorum. Nasıl!?


Basit soru: Kaynak kodunu neden src / main / java'ya taşımıyorsunuz? Veya kodu içeren ve bağımlılık olarak tanımlayan ayrı bir maven projesi / modülü oluşturun.
khmarbaise

7
Benim durumumda, hedef içinde kalmayı tercih ettiğim oluşturulmuş bir kaynak klasörü eklemem gerekiyor.
djjeck

Alternatif olarak, burada anlatılandan farklı dizinlere entegrasyon testleri yerleştirmek isteyebilirsinizsrc/{main,test}/
y2k-shubham

Bu ayrıca burada tartışılmıştır: stackoverflow.com/q/270445/1061929
bjmi

Yanıtlar:


145

Derleme Yardımcısı Eklentisini kullanabilirsiniz , örneğin:

<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
Eclipse, böyle bir klasörü gerçekten buildpathherkes için e-postalardan biri olarak tanıyor mu? 'çünkü benim için değil. FWIW, m2eprojeyi içe aktarmak için kullanıyorum .
mystarrocks

Harika cevap, sadece açıklığa kavuşturmak için, maven-compiler-eklentinizi yukarıdaki satırlarla değiştirmelisiniz ...
Colin

IntelliJ'de de çalışıyor.
Alexander Klimetschek

1
Eclipse benden yapıma yardımcı bağlayıcı m2e için bir eklenti yüklememi istedi. Ben yaptım ve yaşam döngüsü hatası gitti.
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)bu hatayı alıyorum
Katie

36
NOT: Bu çözüm sadece java kaynak dosyalarını hedef / sınıflar dizinine taşıyacak ve kaynakları derlemeyecektir.

Olarak güncelle pom.xml-

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

2
NetBeans bunu bir cazibe gibi aldı :)
Attila

1
Eclipse derleme yoluna eklenen klasör için ** hariç tutmayı kaldırmanız gerekiyor gibi görünüyor :(
Dormouse

@Dormouse açıklar mısınız lütfen?
Saikat

1
IntelliJ ile çalışmaz, <resource>"Kaynak" klasörü olarak görür ancak "Kaynak" klasörü olarak görmez, örneğin Java kaynak dosyalarını içlerinde derlemez.
Alexander Klimetschek

4
Bu çözüm sadece java kaynak dosyalarını hedef / sınıflar dizinine taşıyacak ve kaynakları derlemeyecek
Stefan Haberl

12

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

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

ayrıca bakınız

Maven birden çok src dizini ile derleme


7
Bu, varsayılan src / main / java dizinini geçersiz kılar. Birden fazla dizin istiyorsanız, varsayılanı da belirtmeniz gerekir.
Natix

2
Soru, birden çok kaynak dizinin nasıl ekleneceğidir ve sorulanın tam tersi olan tek bir kaynak dizini eklemek için bir yöntem öneriyorsunuz.
João Matos

1

Son Maven sürümleri (3) ve maven derleyici eklentisinin son sürümü (3.7.0) ile, build-helper-maven-pluginderlemeye eklenecek kaynak kodunu içeren klasör, targetklasör veya bunun bir alt klasörü.
Görünüşe göre derleyici maven eklentisi, bu klasörün içinde bulunan herhangi bir java kaynak kodunu, onları içeren dizin ne olursa olsun derler.
Örneğin bazı (üretilen ya da değil) kaynak kodu olan target/a, target/generated-source/fooderlendi ve outputDirectory eklenecektir: target/classes.


-1

Oluşturma süreciniz için aşağıdaki gibi dizinleri ekleyebilirsiniz:

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

Src / main / java, pom.xml dosyasında belirtilmesi gerekmeyen varsayılan yoldur.


2
Neden insanları olumsuz oylar? Temelde saiky0 ile aynı cevap (olumlu oy var) ama daha mı erken?
Friso

15
@Friso çünkü doğru değil. Bir kaynak dizini eklemek kaynakları ekler (dosyalar kopyalanır target/classesancak derlenmez). Bu soru edilecek dosyaları tutan bir kaynak dizini, ekleme hakkında derlenmiş içine target/classesdeğil kopyalandı.
Darth Android
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.