2010-04-29 40 views
9

Trong tài liệu Maven Introduction to the Build Lifecycle, mục tiêu của display:time được mô tả rằng đầu ra thời gian hiện tại. Plugin là như sau:Làm cách nào để đổi tên mục tiêu trong Maven?

... 
<plugin> 
    <groupId>com.mycompany.example</groupId> 
    <artifactId>maven-touch-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>process-test-resources</phase> 
     <goals> 
     <goal>timestamp</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
... 

Tôi có một số câu hỏi liên quan đến plugin này:

  1. Làm thế nào tôi có thể thay đổi tên của các mục tiêu, ví dụ, foo:bar? (Tại sao không display cũng không phải time xuất hiện ở bất kỳ đâu trong đoạn XML? Làm cách nào bạn có thể biết, nhìn vào đoạn, mục tiêu xác định?)
  2. Làm cách nào để tôi có thể chạy mục tiêu này theo cách thủ công? (Đối với các cấu trúc tương tự, tương đương với mvn display:time đôi khi hoạt động, nhưng điều này không hoạt động nhất quán.)
  3. Làm cách nào để biết liệu mục tiêu này có tồn tại không? (ví dụ: liệt kê các mục tiêu có sẵn; this question gợi ý điều này là không thể.)

Trả lời

11

Làm thế nào tôi có thể thay đổi tên của các mục tiêu, ví dụ, foo:bar? (Tại sao không phải display cũng không time xuất hiện bất cứ nơi nào trong đoạn XML? Làm thế nào bạn có thể nói, từ cách nhìn vào mảnh, những mục tiêu đó định nghĩa?)

Để được chính xác, trong foo:bar, foo là "Mục tiêu của Plugin tiền tố "và bar là" mục tiêu ".Và trong khi sau này bắt nguồn từ các quy ước đặt tên (hoặc có thể là configured), trước đây xuất phát từ chú thích của BarMojo, lớp thực hiện logic plugin. Một cái gì đó như thế này:

/** 
* Do the wonderful bar. 
* @goal bar 
* @requiresProject false 
*/ 
public class BarMojo extends AbstractMojo 
{ 
    ... 
} 

Thay đổi mục tiêu yêu cầu sửa đổi chú thích của mojo của plugin và xây dựng lại nó.

Về tài liệu bạn đã liên kết, có sự không khớp rõ ràng giữa mục tiêu time và đoạn XML liên kết mục tiêu timestamp với pha process-test-resources. Đây phải là lỗi đánh máy.

Làm cách nào để tôi có thể chạy mục tiêu này theo cách thủ công? (Đối với các cấu trúc tương tự, tương đương với màn hình mvn:. Hiện đôi khi làm việc, nhưng điều này không làm việc liên tục)

Bạn có thể gọi nó như thế này:

mvn com.mycompany.example:maven-touch-plugin:1.0:timestamp 

Bạn có thể thực hiện lệnh này ngắn hơn bằng cách thêm com.mycompany.example đến Plugin Groups trong bạn settings.xml (org.apache.maven.pluginsorg.codehaus.mojo được khai báo mặc định trong trường hợp bạn tự hỏi thế nào nó hoạt động đối với những plugins)

<settings> 
    ... 
    <pluginGroups> 
    <pluginGroup>com.mycompany.example</pluginGroup> 
    </pluginGroups> 
</settings> 

Sau đó, vì tên plugin phù hợp với ${prefix}-maven-plugin hoặc maven-${prefix}-plugin mẫu, bạn có thể thực hiện:

mvn touch:timestamp 

Tiếp theo ước được khuyến khích nhưng, như tôi đã nói, tiền tố cũng có thể là configured.

Làm cách nào để biết mục tiêu này có tồn tại không?

Kiểm tra tài liệu plugin (bắt nguồn từ nguồn plugin) hoặc nguồn plugin.


Lưu ý rằng đó cũng là một typo ở dưới cùng của trang đề cập trong Sách Maven. Cách để thực thi plugin với tiền tố tùy chỉnh phải là mvn blah:echo (xem MVNREF-145).

0

Lần đầu tiên. Tên của mục tiêu được xác định bởi plugin (có một chú thích cho điều đó). Nếu có mã nguồn bạn thay đổi đó. Nhìn vào XML, bạn không thể biết loại mục tiêu nào mà plugin chỉ định nghĩa các mục tiêu được đưa ra trong XML. Vị trí tốt nhất là xem tài liệu của plugin. Thứ hai: Bạn phải kiểm tra tài liệu. Thông thường pluginname: mục tiêu ... Có thể bạn phải chỉ định đường dẫn đầy đủ của plugin (groupId). Thứ ba: Thông thường có thể sử dụng plugin trợ giúp, hãy xem docs.

2

Tôi nghĩ có khả năng tài liệu có thể có lỗi đánh máy. Mục tiêu của plugin được chỉ định bởi plugin-name:goal-name. XML đó sẽ ràng buộc mục tiêu touch:timestamp vào giai đoạn process-test-resources. Đoạn đó không liên quan gì đến số display:time.

  1. Theo như tôi biết, không thể đổi tên mục tiêu maven. (Nó có vẻ như nó sẽ chỉ làm cho mọi thứ khó hiểu hơn.) Các mã nguồn plugin là những gì xác định mục tiêu, không phải là pom. Việc thực thi < > trong pom chỉ cho phép bạn liên kết các mục tiêu của plugin với các giai đoạn hoặc khôi phục các mục tiêu nếu chúng đã có một giai đoạn mặc định.

  2. Bạn sẽ có thể chạy một mục tiêu với prefix:goalName. Thông thường, tiền tố đơn giản là bất cứ thứ gì nằm giữa "maven-" và "-plugin" trong artifactId. ví dụ. touch:timestamp. Điều này là phức tạp trong một vài tình huống kể từ khi tác giả plugin có thể chỉ định một "goalPrefix" khác với tên plugin, nhưng tôi chưa bao giờ gặp phải vấn đề với điều này.

  3. Cách tốt nhất để tìm hiểu mục tiêu của plugin là gì và các giai đoạn nào chúng được ràng buộc theo mặc định là đọc tài liệu plugin.

0

Làm cách nào để thay đổi tên mục tiêu thành, ví dụ: foo: bar? (Tại sao không hiển thị cũng như thời gian không xuất hiện ở bất kỳ nơi nào trong đoạn XML? Làm thế nào bạn có thể biết, nhìn vào mảnh đó, mục tiêu nào nó xác định?)

Để đổi tên tiền tố thành "foo" bạn cần cấu hình plugin "plugin" của maven.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-plugin-plugin</artifactId> 
    <version>2.5.1</version> 
    <configuration> 
     <goalPrefix>foo</goalPrefix> 
    </configuration> 
    </plugin> 

Để thay đổi tên của mục tiêu, bạn cần phải chỉnh sửa javadoc trong nguồn java plugin của

/** 
* Prints a timestamp to console 
* 
* @goal bar 
*/ 
public class TimestampMojo extends AbstractMojo { 
    // ... 
} 

Thêm tiền tố plugin để cài đặt.xml file

<pluginGroups> 
    <pluginGroup>com.mycompany.example</pluginGroup> 
</pluginGroups> 

Làm thế nào tôi có thể chạy thủ công mục tiêu này?

mvn com.mycompany.example:foo:bar 

hoặc với thiết lập tiền tố plugin (ở trên)

mvn foo:bar 

Làm thế nào tôi có thể thấy nếu mục tiêu này tồn tại? (ví dụ: liệt kê các mục tiêu có sẵn)

Thêm phần sau vào phần tử plugin plugin maven và bạn có thể sử dụng foo: giúp in ra danh sách mục tiêu.

<plugin> 
... 
<executions> 
<execution> 
<id>generated-helpmojo</id> 
<goals> 
<goal>helpmojo</goal> 
</goals> 
</execution> 
</executions> 
</plugin> 
Các vấn đề liên quan