จะเพิ่มไดเร็กทอรีซอร์สเพิ่มเติมสำหรับ maven เพื่อคอมไพล์และรวมไว้ใน build jar ได้อย่างไร


96

In addition to the src/main/java, I am adding a src/bootstrap directory that I want to include in my build process, in other words, I want maven to compile and include the sources there in my build. How!?


Simple question: Why not moving the source code to src/main/java ? Or create a separate maven project/module which contains the code and define it as dependency.
khmarbaise

7
ในกรณีของฉันฉันต้องเพิ่มโฟลเดอร์ซอร์สที่สร้างขึ้นซึ่งฉันชอบที่จะอยู่ภายในเป้าหมาย
djjeck

หรืออีกวิธีหนึ่งอาจต้องการวางการทดสอบการรวมในไดเรกทอรีอื่นนอกเหนือจากsrc/{main,test}/ที่บอกไว้ที่นี่
y2k-shubham

มีการพูดคุยเรื่องนี้ด้วยที่นี่: stackoverflow.com/q/270445/1061929
bjmi

คำตอบ:


145

คุณสามารถใช้Build Helper Pluginเช่น:

<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 รับรู้ว่าโฟลเดอร์ดังกล่าวเป็นหนึ่งในโฟลเดอร์buildpathสำหรับใครหรือไม่? 'เพราะมันไม่ใช่สำหรับฉัน FWIW ฉันใช้m2eเพื่อนำเข้าโครงการ
mystarrocks

คำตอบที่ดีเพียงเพื่อชี้แจงคุณควรแทนที่ maven-compiler-plugin ของคุณด้วยบรรทัดจากด้านบน ...
Colin

ทำงานใน IntelliJ เช่นกัน
Alexander Klimetschek

1
Eclipse ขอให้ฉันติดตั้งปลั๊กอินสำหรับ m2e ตัวเชื่อมต่อ build helper ฉันทำแล้วและข้อผิดพลาดของวงจรชีวิตหายไป
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)รับข้อผิดพลาดนี้
เคธี่

36
หมายเหตุ: วิธีนี้จะย้ายไฟล์ซอร์ส java ไปยังไดเร็กทอรีเป้าหมาย / คลาสและจะไม่คอมไพล์ซอร์ส

อัปเดตpom.xmlเป็น -

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

2
NetBeans หยิบมันขึ้นมาอย่างมีเสน่ห์ :)
Attila

1
ดูเหมือนว่าคุณจำเป็นต้องลบ ** exclusion สำหรับโฟลเดอร์ที่เพิ่มบนเส้นทางการสร้าง Eclipse แม้ว่า :(
Dormouse

@Dormouse ช่วยอธิบายหน่อยได้ไหม?
Saikat

1
ไม่ทำงานกับ IntelliJ จะเห็น<resource>เป็นโฟลเดอร์ "Resource" แต่ไม่ใช่โฟลเดอร์ "Source" เช่นจะไม่รวบรวมไฟล์ซอร์ส Java ไว้ภายใน
Alexander Klimetschek

4
วิธีนี้จะย้ายไฟล์ซอร์ส java ไปยังไดเร็กทอรีเป้าหมาย / คลาสและจะไม่รวบรวมแหล่งที่มา
Stefan Haberl

12

7
สิ่งนี้จะแทนที่ไดเร็กทอรี src / main / java เริ่มต้น หากคุณต้องการหลายไดเรกทอรีคุณต้องระบุไดเร็กทอรีเริ่มต้นด้วย
Natix

2
คำถามคือวิธีเพิ่มไดเรกทอรีต้นทางหลายรายการและคุณกำลังเสนอวิธีการเพิ่มไดเร็กทอรีซอร์สเพียงรายการเดียวซึ่งตรงข้ามกับสิ่งที่ถาม
João Matos

1

ด้วยเวอร์ชัน Maven ล่าสุด (3) และเวอร์ชันล่าสุดของปลั๊กอินคอมไพเลอร์ maven (3.7.0) ฉันสังเกตเห็นว่าbuild-helper-maven-pluginไม่จำเป็นต้องเพิ่มโฟลเดอร์ซอร์สด้วยซอร์สโค้ดหากโฟลเดอร์ที่มีซอร์สโค้ดที่จะเพิ่มในบิลด์นั้นอยู่ในtargetโฟลเดอร์หรือโฟลเดอร์ย่อยของมัน
ดูเหมือนว่าปลั๊กอิน maven ของคอมไพเลอร์จะรวบรวมซอร์สโค้ด java ที่อยู่ภายในโฟลเดอร์นี้ไม่ว่าจะอยู่ในไดเร็กทอรีใดก็ตาม
ตัวอย่างเช่นมีบางคน (ที่สร้างขึ้นหรือไม่) รหัสแหล่งที่มาในtarget/a, target/generated-source/fooจะได้รับการรวบรวมและเพิ่มเข้ามาใน outputDirectory target/classesนี้:


-1

คุณสามารถเพิ่มไดเร็กทอรีสำหรับกระบวนการสร้างของคุณเช่น:

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

src / main / java เป็นเส้นทางเริ่มต้นซึ่งไม่จำเป็นต้องกล่าวถึงใน pom.xml


2
ทำไมผู้คนจึงโหวตลงคะแนน? โดยทั่วไปคำตอบเดียวกับของ saiky0 (ซึ่งมีการโหวตเพิ่มขึ้น) แต่ก่อนหน้านี้?
Friso

15
@ ฟริโซเพราะไม่ถูกต้อง. การเพิ่มไดเรกทอรีทรัพยากรจะเพิ่มทรัพยากร (ไฟล์ที่คัดลอกไปtarget/classesแต่ไม่ได้รวบรวม) คำถามนี้เป็นคำถามเกี่ยวกับการเพิ่มไดเรกทอรีต้นทางซึ่งถือแฟ้มที่จะถูกรวบรวมลงในtarget/classesไม่คัดลอก
Darth Android
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.