2012-06-28 39 views
32

Gần đây, tôi đã accross vấn đề sau đây:Maven quản lý phụ thuộc cho phụ thuộc Plugin

Như tôi đã thiết lập quản lý phụ thuộc cho dự án của tôi, tôi đã có con-pom sử dụng plugin với phụ thuộc, mà tôi muốn được đồng bộ hóa với phụ thuộc tuyên bố trong quản lý phụ thuộc của tôi.

Trong một pom gốc, tôi tuyên bố trong quản lý phụ thuộc của tôi:

<dependencyManagement> 
    <dependencies> 
     ... 
     <dependency> 
      <groupId>com.google.gwt</groupId> 
      <artifactId>gwt-user</artifactId> 
      <version>2.4.0</version> 
     </dependency> 
     ... 
    <dependencies> 
<dependencyManagement> 

Và trong pom con, tôi có một plugin mà cần gwt-user:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>gwt-maven-plugin</artifactId> 
    <version>2.4.0</version> 
    <dependencies> 
     <dependency> 
      <groupId>com.google.gwt</groupId> 
      <artifactId>gwt-user</artifactId> 
      <version>2.4.0</version> 
     </dependency> 
      ... 
     </dependencies> 
    ... 
</plugin> 

Tuy nhiên, nếu tôi xóa phiên bản phụ thuộc được sử dụng trong gwt-maven-plugin, quá trình biên dịch không thành công.

Có cách nào khác để đạt được điều đó không?

PS: Có một bài liên quan Choosing dependency version in maven and maven plugin mà không trả lời câu hỏi của tôi

Trả lời

36

Theo các liên kết sau đây, có vẻ như không thể:

Đây là một workaround tôi thấy, và tôi muốn chia sẻ với tất cả mọi người, trong trường hợp những người khác có cùng một vấn đề:

Trong pom gốc của tôi, tôi đã xác định thuộc tính, quản lý phụ thuộc và trình cắm plugin agement:

<properties> 
    <gwtVersion>2.4.0</gwtVersion> 
    <gwtMavenPluginVersion>2.4.0</gwtMavenPluginVersion> 
</properties> 

<dependencyManagement> 
    <dependencies> 
    ... 
    <dependency> 
     <groupId>com.google.gwt</groupId> 
     <artifactId>gwt-user</artifactId> 
     <version>${gwtVersion}</version> 
    </dependency> 
    ... 
    <dependencies> 
<dependencyManagement> 

<build>  
    <pluginManagement> 
     <plugins> 
      <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>gwt-maven-plugin</artifactId> 
      <version>${gwtMavenPluginVersion}</version> 
      <dependencies> 
       <dependency> 
        <groupId>com.google.gwt</groupId> 
        <artifactId>gwt-user</artifactId> 
        <version>${gwtVersion}</version> 
       </dependency> 
       ... 
      </dependencies> 
      ... 
     </plugins> 
    ... 
    </pluginManagement> 
</build> 

Và trong pom con tôi, bằng cách sử dụng mối quan hệ được cung cấp bởi các plugin quản lý (xem Maven2 - problem with pluginManagement and parent-child relationship), tôi chỉ cần khai báo sự phụ thuộc plugin:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>gwt-maven-plugin</artifactId> 
</plugin> 

Bây giờ nếu tôi thay đổi phiên bản trong các thuộc tính , nó sẽ tự động tác động đến tất cả các phụ thuộc trực tiếp và các phụ thuộc của plugin.

+0

IMHO nếu phụ thuộc chỉ cần thiết trong plugin, không sử dụng cho phần phụ thuộcQuản lý quản lý –

+3

để tham khảo tương lai. pluginManagement đang được xây dựng – TecHunter

4

Đối với một POM mẹ để kiểm soát mà Plugin phiên bản trẻ sử dụng, bạn nên khai báo <plugin> trong một phần <pluginManagement> của cha mẹ POM.

Bạn đã xác định com.google.gwt:gwt-user làm <dependency> trong phần <dependencyManagement>.

Tôi không chắc chắn liệu bạn có ý định sử dụng gwt-user làm plugin hay phụ thuộc hay không, nhưng nó phải được liệt kê là cùng một thực thể cho cả kế thừa để làm việc.

+0

gwt-user được sử dụng làm plugin có phụ thuộc. OP đang cố gắng để có được phiên bản được xác định cho cả hai chỉ trong một địa điểm. – eis

1

Khả năng khác là nhập khẩu tất cả các phụ thuộc của POM mẹ:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>gwt-maven-plugin</artifactId> 
    <version>2.4.0</version> 
    <dependencies> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>${project.artifactId}</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
      ... 
     </dependencies> 
    ... 
</plugin> 

Không phải là giải pháp đẹp nhất, nhưng làm việc :-)

0

Trong trường hợp của tôi, tôi đã sử dụng các plugin cầu cảng maven , với sự phụ thuộc vào hsqldb. Tôi đã sao chép một số dòng mẫu từ cuốn sách sonatype (tôi nghĩ rằng đó là nơi tôi có các dòng từ) để sử dụng các plugin jetty, trong đó quy định groupId là hsqldb.Tôi đang sử dụng phiên bản 2.3.2 của hsqldb. Trong pom cha mẹ của tôi trong phần dependencyManagement và mô đun persistence của tôi, groupId là org.hsqldb. Có groupIds không khớp là những gì đã khiến tôi nhận được một lỗi, bởi vì theo groupId cũ đó không có một phiên bản 2.3.2. Khi tôi đã thay đổi groupId từ hsqldb thành org.hsqldb, mọi thứ bắt đầu hoạt động.

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