2011-07-02 22 views
6

Lưu ý: chủ đề này là viết một Mojo tùy chỉnh, không sử dụng plugin.Viết một Maven Plugin/Mojo: làm thế nào để bạn thực hiện một mục tiêu buộc thực hiện các mục tiêu khác?

Tôi duy trì testing plugin cho Maven. Thật không may, trong gần một năm nay, tôi đã để cái nặc danh này không biết và tôi thực sự muốn biết cách xử lý nó để người dùng của nó có thể có một cấu hình đơn giản hơn.

Hãy nói rằng chúng tôi có hai mục tiêu trong plugin của chúng tôi:

  • prepare (giai đoạn: generate-nguồn)
  • do (giai đoạn: biên dịch)

Tôi muốn cấu hình do Mojo yêu cầu prepare đã được thực hiện trong giai đoạn trước của quá trình xây dựng. Tuy nhiên, không có gì trong số descriptor documentation gợi ý tôi có thể.

Người dùng có thể không quan tâm hoặc hiểu được điểm của mục tiêu prepare, vì vậy tôi không muốn buộc họ chỉ định nó trong POM của họ. Tất nhiên, tôi có thể thực hiện Mojo trực tiếp từ do, nhưng sau đó mục tiêu prepare sẽ chạy ở giai đoạn muộn hơn dự định.

(Tôi nhìn vào custom lifecycles, nhưng mà làm cho nó xuất hiện rằng tất cả những người đã có mục tiêu prepare trong POMs của họ sẽ có nó được thực hiện hai lần khi chạy do.)

Trả lời

3

Bạn có thể có một cái gì đó giống như dưới đây (lấy từ the CompilerMojo):

/** 
* @author <a href="mailto:[email protected]">Jason van Zyl </a> 
* @version $Id: CompilerMojo.java 941498 2010-05-05 21:24:11Z krosenvold $ 
* @since 2.0 
* @goal compile 
* @phase compile 
* @threadSafe 
* @requiresDependencyResolution compile 
*/ 

Bằng cách thiết lập điều này qua lớp, nó sẽ thực thi trong giai đoạn biên dịch (trong ví dụ này). Giai đoạn biên dịch yêu cầu tất cả các giai đoạn trước đã thực thi trước (validate, generate-sources, process-sources, generate-resources, process-resources ...).

Về cơ bản, hãy chọn một giai đoạn sau giai đoạn bạn cần (hoặc thậm chí cùng một giai đoạn) và nó sẽ hoạt động.

+0

Đó là cách xác định rằng 'do' Mojo sẽ liên kết với giai đoạn biên dịch theo mặc định và được đặt tên là' biên dịch' làm mục tiêu, nhưng tiếc là tôi không thấy cách nó nói "oh và chắc chắn rằng 'chuẩn bị' được chạy đầu tiên ". Tại thời điểm này có vẻ như câu trả lời duy nhất là một vòng đời tùy chỉnh ... mà tôi đã làm việc nhưng tôi không chắc chắn tôi thích được nêu ra. –

+0

Thú vị. Có lẽ bạn có thể thử kênh IRM #maven trong irc.codehaus.org. Có lẽ một số người sẽ có một gợi ý tốt hơn. – carlspring

+0

Tại sao downvote? Có, đây là cách không dựa trên chú thích cũ hơn để thực hiện, nhưng nó vẫn hợp lệ. – carlspring

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