2008-09-24 22 views

Trả lời

0

Tôi không chắc chắn làm thế nào bạn sẽ làm điều đó chính xác, nhưng có vẻ như với tôi rằng điều này có thể không phải là quyết định thiết kế tốt nhất. Nếu có thể bạn nên nhắm đến việc tách rời Mojo của bạn khỏi bất kỳ plugin nào khác ngoài đó.

Thay vào đó, tôi khuyên bạn nên sử dụng các thuộc tính tùy chỉnh để tính ra bất kỳ sự trùng lặp nào trong cấu hình của các plugin riêng biệt.

Bạn có thể thiết lập thuộc tính tùy chỉnh "foo" trong pom của bạn bằng cách sử dụng các thuộc tính phần:

<project> 
    ... 
    <properties> 
    <foo>value</foo> 
    </properties> 
    ... 
</project> 

Các foo bất động sản bây giờ đã truy cập bất cứ nơi nào trong pom bằng dấu đô la + ký hiệu dấu ngoặc nhọn:

<somePluginProperty>${foo}</somePluginProperty> 
3

Đặc tính sử dụng chắc chắn là một cách để đi, tuy nhiên không phải lý tưởng. Nó vẫn yêu cầu người dùng định nghĩa $ {propertyName} ở nhiều nơi trong toàn bộ pom. Tôi muốn cho phép plugin của tôi hoạt động mà không có sửa đổi đối với pom của người dùng, ngoài định nghĩa plugin của chính nó.

Tôi không thấy truy cập các thuộc tính thời gian chạy của MOJO khác như khớp nối quá chặt. Nếu MOJO khác được định nghĩa ở bất kỳ đâu trong cấu trúc phân cấp xây dựng, tôi muốn MOJO của tôi tôn trọng cùng một cấu hình.

giải pháp hiện tại của tôi là:

private Plugin lookupPlugin(String key) { 

    List plugins = getProject().getBuildPlugins(); 

    for (Iterator iterator = plugins.iterator(); iterator.hasNext();) { 
     Plugin plugin = (Plugin) iterator.next(); 
     if(key.equalsIgnoreCase(plugin.getKey())) { 
      return plugin; 
     } 
    } 
    return null; 
} 


/** 
* Extracts nested values from the given config object into a List. 
* 
* @param childname the name of the first subelement that contains the list 
* @param config the actual config object 
*/ 
private List extractNestedStrings(String childname, Xpp3Dom config) { 

    final Xpp3Dom subelement = config.getChild(childname); 
    if (subelement != null) { 
     List result = new LinkedList(); 
     final Xpp3Dom[] children = subelement.getChildren(); 
     for (int i = 0; i < children.length; i++) { 
      final Xpp3Dom child = children[i]; 
      result.add(child.getValue()); 
     } 
     getLog().info("Extracted strings: " + result); 
     return result; 
    } 

    return null; 
} 

này đã làm việc cho vài nhỏ xây dựng tôi đã thử nghiệm với. Bao gồm bản dựng nhiều mô-đun.

3

Bạn có thể nhận được một danh sách các plugin hiện được sử dụng trong xây dựng sử dụng các bước sau:

Trước tiên, bạn cần phải nhận được Maven để tiêm dự án hiện tại vào mojo của bạn, bạn sử dụng các biến lớp học định nghĩa dưới đây để có được điều này.

/** 
* The maven project. 
* 
* @parameter expression="${project}" 
* @readonly 
*/ 
private MavenProject project; 

Sau đó, bạn có thể sử dụng phần sau để có danh sách các plugin được sử dụng trong bản dựng này.

mavenProject.getBuildPlugins() 

Bạn có thể lặp lại danh sách này cho đến khi bạn tìm thấy plugin mà bạn muốn trích xuất cấu hình.

Cuối cùng, bạn có thể lấy cấu hình dưới dạng Xpp3Dom.

plugin.getConfiguration() 

Lưu ý: Nếu bạn thay đổi cấu hình bổ sung khác (thay vì chỉ trích thông tin), nó sẽ chỉ bị thay đổi cho giai đoạn hiện tại chứ không phải giai đoạn tiếp theo.

+0

Điều này khác với giải pháp của tôi ở trên như thế nào? Ngoài ra, getBuildPlugins chỉ trả lại các plugin được định nghĩa trong phần của tệp pom.xml hay tất cả các plugin, ngay cả những plugin được xác định trong tiểu sử, v.v ...? – npellow

+1

Sử dụng getBuildPlugins() sẽ chỉ trả lại các plugin nằm trong phần của pom.xml và các plugin được xác định trong phần của các cấu hình hoạt động. – Kingamajick

+0

@Kingamajick Tôi có phải tuôn ra thay đổi bằng cách nào đó không? Tôi đã thay đổi phụ thuộc plugin (trong quá trình thực hiện plugin này) và tôi không thể thấy kết quả mong đợi –

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