Làm cách nào để thêm một thư mục nguồn bổ sung để maven biên dịch và đưa vào build jar?


95

Ngoài src / main / java, tôi đang thêm một thư mục src / bootstrap mà tôi muốn đưa vào quá trình xây dựng của mình, nói cách khác, tôi muốn maven biên dịch và đưa các nguồn ở đó vào bản dựng của mình. Làm sao!?


Câu hỏi đơn giản: Tại sao không chuyển mã nguồn sang src / main / java? Hoặc tạo một dự án / mô-đun maven riêng biệt chứa mã và xác định nó là phần phụ thuộc.
khmarbaise

7
Trong trường hợp của tôi, tôi cần thêm một thư mục nguồn đã tạo, mà tôi muốn nằm bên trong mục tiêu.
djjeck

Ngoài ra, người ta có thể muốn nơi hội nhập-kiểm tra trong các thư mục khác hơn src/{main,test}/là nói ở đây
Y2K-Shubham

Điều này cũng đã được thảo luận ở đây: stackoverflow.com/q/270445/1061929
bjmi

Câu trả lời:


143

Bạn có thể sử dụng Plugin trình trợ giúp xây dựng , ví dụ:

<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
Nhật thực có thực sự nhận ra một thư mục như vậy là một trong những thư mục buildpathdành cho bất kỳ ai không? vì nó không dành cho tôi. FWIW, tôi sử dụng m2eđể nhập dự án.
mystarrocks

Great câu trả lời, chỉ cần làm rõ, bạn nên thay thế của bạn maven-biên dịch-cắm với các dòng từ trên cao ...
Colin

Cũng hoạt động trong IntelliJ.
Alexander Klimetschek

1
Eclipse yêu cầu tôi cài đặt một plugin cho m2e, trình kết nối trợ giúp xây dựng. Tôi đã làm điều đó và lỗi vòng đời đã biến mất.
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)gặp lỗi này
Katie

35
LƯU Ý: Giải pháp này sẽ chỉ di chuyển các tệp nguồn java vào thư mục đích / lớp và sẽ không biên dịch các nguồn.

Cập nhật pom.xmldưới dạng -

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

2
NetBeans đã chọn nó như một cái duyên :)
Attila

1
Có vẻ như bạn cần phải xóa ** loại trừ cho thư mục đã thêm trên đường dẫn xây dựng Eclipse :(
Dormouse

@Dormouse bạn có thể giải thích được không?
Saikat

1
Không hoạt động với IntelliJ, nó sẽ được xem <resource>là thư mục "Tài nguyên" nhưng không phải là thư mục "Nguồn", ví dụ: nó sẽ không biên dịch các tệp nguồn Java bên trong chúng.
Alexander Klimetschek

4
Giải pháp này sẽ chỉ di chuyển các tập tin nguồn java với mục tiêu / classes thư mục và sẽ không biên dịch các nguồn
Stefan Haberl

12

7
Điều này ghi đè thư mục src / main / java mặc định. Nếu bạn muốn có nhiều thư mục, bạn cũng phải chỉ định thư mục mặc định.
Natix

2
Câu hỏi đặt ra là làm thế nào để thêm nhiều thư mục nguồn và bạn đang đề xuất một phương pháp chỉ thêm một thư mục nguồn, điều này ngược lại với những gì được hỏi.
João Matos

1

Với các phiên bản Maven gần đây (3) và phiên bản gần đây của plugin trình biên dịch maven (3.7.0), tôi nhận thấy rằng build-helper-maven-pluginkhông bắt buộc phải thêm thư mục nguồn với tệp nếu thư mục chứa mã nguồn để thêm vào bản dựng nằm trong targetthư mục hoặc một thư mục con của nó.
Có vẻ như trình biên dịch maven plugin biên dịch bất kỳ mã nguồn java nào nằm bên trong thư mục này bất kể thư mục chứa chúng.
Ví dụ, có một số mã nguồn (được tạo hoặc không) trong target/a, target/generated-source/foosẽ được biên dịch và thêm vào trong outputDirectory : target/classes.


-1

Bạn có thể thêm các thư mục cho quá trình xây dựng của mình như:

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

Src / main / java là đường dẫn mặc định không cần thiết được đề cập trong pom.xml


2
Tại sao mọi người lại phản đối? Về cơ bản câu trả lời giống với câu trả lời saiky0 (có lượt ủng hộ) nhưng sớm hơn?
Sáu,

15
@Cũng vì nó không đúng. Thêm thư mục tài nguyên sẽ thêm tài nguyên (tệp được sao chép vào target/classes, nhưng không được biên dịch). Câu hỏi này là về việc thêm một thư mục nguồn, nơi chứa các tệp sẽ được biên dịch vào target/classes, không được sao chép.
Darth Android
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.