2012-01-04 29 views
14

Tôi đang làm việc trên một công cụ blog rất đơn giản trong Java để tìm hiểu nhiều công nghệ.Cách bao gồm đúng các nguồn Java trong Maven?

Công nghệ: Spring IoC, Hibernate, jUnit, GWT và Maven.

Tôi tạo ra hai dự án Maven: một dự án cốt lõi và một dự án GWT (trong đó có một tài liệu tham khảo trên lõi một)

Mã có thể truy cập tại https://github.com/LaurentT/BlogEngineCore

Mục tiêu của tôi là như sau: Tôi muốn bao gồm Các nguồn Java và XML vì dự án GWT của tôi sẽ cần các nguồn Java để biên dịch nó thành JavaScript.

Tôi cố gắng để sử dụng đoạn mã sau trong <build> phần tử:

 <resources> 
     <resource> 
      <directory>src/main/java</directory> 
      <includes> 
       <include>**/*.java</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <includes> 
       <include>**/*.*xml</include> 
       <include>**/*.*properties</include> 
      </includes> 
     </resource> 
    </resources> 

kiểm tra JUnit tôi sử dụng để vượt qua và kết thúc trước đó thêm nhưng bây giờ họ thậm chí còn không xong họ đang treo ...

Tôi không biết đầu mối gì đang diễn ra, vì vậy tôi muốn biết có cách nào khác để đưa các nguồn Java vào hay không, nếu tôi làm sai.

Bất kỳ đầu mối nào?

+0

tại sao bạn nghĩ "thử nghiệm junit đang treo" có bất cứ điều gì để làm với bao gồm các nguồn java ? – milan

+0

Nó chỉ là nếu tôi loại bỏ những dòng thử nghiệm của tôi là kết thúc và đi qua. Tôi không biết tại sao nhưng đó là những gì nó đang làm: ( –

Trả lời

11

thử bao gồm $ {basedir} ở phía trước đường dẫn thư mục.

<resource> 
    <directory>${basedir}/src/main/java</directory> 
</resource> 
+0

Giải pháp của Sean là tốt nếu tôi muốn có hai JAR riêng biệt nhưng ở đây kể từ khi dự án GWT của tôi đang tải một bình (dự án cốt lõi), tôi thực sự cần một JAR để được tải trong classpath nơi tôi có thể tìm thấy các nguồn của mình, điều này làm việc như một sự quyến rũ! Cảm ơn rất nhiều Mike –

+0

Điều này sẽ bao gồm tất cả các tệp trong thư mục nguồn của bạn trong khi bạn có thể muốn chỉ bao gồm '* .gwt.xml' và các nguồn từ' client 'và' shared' dirs –

3

Bạn có thể tìm cách thiết lập maven cho dự án đa thức here.

Tệp * gwt.xml ở đâu?

Nếu thẻ được hiển thị là một phần của tập tin pom.xml các lõi dự án, sau đó bạn cũng nên thêm <include>**/*.gwt.xml</include>:

<resource> 
     <directory>src/main/java</directory> 
     <includes> 
      <include>**/*.java</include> 
      <include>**/*.gwt.xml</include> 
     </includes> 
</resource> 
+0

Điều này làm việc cho tôi, tuy nhiên hãy cẩn thận, điều này sẽ gây ra mọi thứ trong src/main/resources KHÔNG được đưa vào jar. sửa chữa đơn giản bằng cách sao chép và thêm một tài nguyên khác cho src/main/các tài nguyên, bao gồm các phần mở rộng/ký tự đại diện thích hợp –

+0

Ví dụ này chỉ bao gồm các tệp cần thiết cho mô-đun gwt, tốt hơn là bao gồm tất cả mọi thứ một cách mù quáng trong thư mục src. Cảm ơn! –

+0

@ClickUpvote bạn đúng, ví dụ đã được chỉnh sửa để làm cho nó dễ dàng hơn. Bây giờ là drop-in imho. –

21

Cách sạch maven sẽ được đính kèm một jar nguồn riêng biệt.

Có nhiều cách tiêu chuẩn để tạo ra nó trong xây dựng của bạn using the maven source plugin:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-source-plugin</artifactId> 
    <version>2.2.1</version> 
    <executions> 
    <execution> 
     <id>attach-sources</id> 
     <phase>verify</phase> 
     <goals> 
     <goal>jar-no-fork</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Và dự án GWT của bạn bây giờ có thể tham khảo các nguồn dự án cốt lõi của bạn, thêm vào dự án cốt lõi jar của bạn:

<dependency> 
    <groupId>your.project</groupId> 
    <artifactId>core</artifactId> 
    <version>the.same.version</version> 
    <classifier>sources</classifier> 
    <scope>provided</scope><!-- use for compilation only --> 
</dependency> 
+0

Cảm ơn rất nhiều! Bất kỳ cách nào để làm điều này trong một cái bình chỉ? Hay không phải là một vấn đề? –

+0

@LaurentT xem xét các câu trả lời khác cho điều đó. Nhưng như tôi đã nói, đó là ít maven giống như –

+1

Câu trả lời này có bao gồm các tệp '* .gwt.xml' không? –

0

Trong Ngược lại với các câu trả lời khác, cách tiếp cận của tôi sao chép tất cả các mô tả mô-đun *.gwt.xml và chỉ các tệp nguồn java thực sự được chỉ định trong các mô tả mô-đun. Bạn cũng không cần phải lặp lại chính mình trong POM và mô tả mô-đun.

Cập nhật pom của bạn với:

<plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>gwt-maven-plugin</artifactId> 
      <version>2.7.0</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>resources</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

và * .gwt.xml bạn

<?xml version="1.0" encoding="UTF-8"?> 
<module> 

    <!-- Specify the paths for translatable code --> 
    <source path='shared' /> 

</module> 

org: codehaus.mojo: docs gwt-maven-plugin

gwt: nguồn
Mô tả: Sao chép GWT mã nguồn java và mô tả mô-đun như nguồn lực trong xây dựng outputDirectory. Thay thế để khai báo một <resource> trong POM với lọc mịn hơn khi mô tả mô-đun được đọc để phát hiện các nguồn được sao chép.
Thực hiện: org.codehaus.mojo.gwt.GwtResourcesMojo
Ngôn Ngữ: java
ràng buộc để giai đoạn: quá trình nguồn

Các vấn đề liên quan