2010-09-22 27 views
5

Tôi đang phát triển một dự án web dựa trên Spring (MVC), Hibernate, PostgreSQL (sử dụng Maven). Bây giờ tôi đang cố gắng để có được một khách hàng mới, những người yêu cầu một số khác biệt trong một số phần của ứng dụng. Tôi đã đọc Maven Definitive Guide từ Sonatype để có cảm giác về Multi-modules Maven Projects nhưng một trong những câu hỏi quan trọng nhất của tôi chưa được trả lời: Làm cách nào để chia sẻ các thành phần khung nhìn chung về khách hàng tôi muốn xây dựng cho? Lớp dịch vụ khá rõ ràng nhưng tôi không thể tìm ra cách chia sẻ tệp jsp/jspf và hợp nhất chúng với các tệp tùy chỉnh khi xây dựng mô-đun khách hàng cụ thể (mà sau đó phụ thuộc vào mô-đun chung).Phát triển dự án Ứng dụng Web Java cho hai khách hàng

Bạn sẽ cố gắng tránh chỉ đơn giản là sao chép mã thường được sử dụng?

+0

Cảm ơn câu trả lời của bạn! Đặc biệt là Maven Dependency Plugin có vẻ hữu ích. Tôi đã đi qua một giải pháp khác bằng cách sử dụng Maven WAR Plugin và các lớp phủ của nó. Sau đó, bạn có thể thêm phụ thuộc vào một cuộc chiến khác và sử dụng lại các phần của chiến dịch đó (ví dụ: chiến tranh chung). Plugin tài nguyên từ xa dường như được thực hiện chủ yếu để phân phối giấy phép, nhưng cũng có thể thực hiện công việc. – velaia

+0

bạn nên thêm các nhận xét như vậy vào các câu trả lời mà bạn đang đề cập đến hoặc chỉnh sửa câu hỏi gốc của bạn. Ngoài ra: phiên bản StackOverflow của câu nói "Cảm ơn câu trả lời của bạn" là nhấp vào mũi tên lên trên chúng, lời cảm ơn althogh cũng được đánh giá cao :-) –

Trả lời

3

Bạn có thể đặt các thành phần chung trong một dự án thư viện và giải nén chúng khi cần thiết sử dụng dependency:unpack hoặc dependency:unpack-dependencies

Ví dụ: bạn dự án bố trí sẽ là như thế:

root 
|____ common-lib (jar, contains common java code) 
|____ common-gui (jar, contains only non-java stuff like js, jsp, css etc) 
|____ client1 (war) 
|____ client2 (war) 

client1 và client2 mỗi người sẽ có một compile phụ thuộc thường xuyên để chung lib, nhưng chỉ có một sự phụ thuộc provided để chung gui (nếu bạn sử dụng dependency:unpack nó không phải là một sự phụ thuộc dự án ở tất cả)

Bây giờ bạn muốn thêm mã như thế này cho các dự án khách hàng của bạn:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>unpack-common-gui-elements</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>unpack</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
        <artifactItem> 
         <groupId>com.yourcompany</groupId> 
         <artifactId>common-gui</artifactId> 
         <version>${project.version}</version> 
         <type>jar</type> 
         <!-- war assembly directory --> 
         <outputDirectory> 
          ${project.build.directory}/${project.build.finalName} 
         </outputDirectory> 
         <includes>**/*.jsp,**/*.css,**/*.js</includes> 
        </artifactItem> 
       </artifactItems> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Bằng cách đó bạn có thể tái sử dụng các thành phần của bạn nhưng bạn luôn có thể chọn cho mình đó các thành phần bạn cung cấp cho khách hàng nào.

+0

Đây là một cách khác và có thể hữu ích quá +1. Nó nhắc tôi về [Cách chia sẻ tài nguyên qua các dự án trong Maven] (http://www.sonatype.com/people/2008/04/how-to-share-resources-across-projects-in-maven/). –

4

Tôi không thể tìm ra cách chia sẻ tệp jsp/jspf và hợp nhất chúng với tệp tùy chỉnh khi xây dựng mô-đun khách hàng cụ thể (sau đó phụ thuộc vào mô-đun chung).

Điều này giống như trường hợp sử dụng tốt cho Overlays.

+0

Tôi đồng ý (+1) ... –

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