2010-09-19 42 views
12

Tôi có một plugin để chuyển đổi các lớp đã biên dịch. Việc chuyển đổi này cần được thực hiện cho cả các lớp của mô-đun và các lớp kiểm tra của mô-đun. Vì vậy, tôi ràng buộc các plugin cho cả hai quá trình-lớp học và giai đoạn quá trình kiểm tra-lớp học. Vấn đề tôi có là tôi cần phải xác định giai đoạn mà plugin hiện đang thực thi, vì tôi không (không thể, thực sự) chuyển đổi cùng một tập các lớp hai lần.Xác định giai đoạn thực hiện Maven trong một plugin

Vì vậy, trong plugin, tôi sẽ cần phải biết nếu tôi đang thực hiện quy trình lớp học - trong trường hợp này tôi chuyển đổi các lớp học của mô-đun. Hoặc nếu tôi đang thực hiện các lớp kiểm tra quá trình - trong trường hợp này tôi không chuyển đổi các lớp của mô-đun và chỉ chuyển đổi các lớp thử nghiệm của mô-đun.

Tôi có thể, tất nhiên, tạo hai plugin cho điều này, nhưng loại giải pháp này làm xúc phạm sự nhạy cảm của tôi và có lẽ là trái luật ở một số tiểu bang.

Có vẻ như điều gì đó tôi có thể tiếp cận từ mô-đun của mình sẽ có thể cho tôi biết giai đoạn hiện tại là gì. Tôi không thể cho cuộc sống của tôi tìm ra cái gì đó là gì.

Thanks ...

+0

các '[zombie]' tag là gì? –

+0

@Pascal Thivent cho quá trình zombie và zombie máy tính :) –

+0

@Colin Vâng tôi đã có nhưng tôi không thấy bất kỳ mối quan hệ với câu hỏi. –

Trả lời

7

Như vậy, trong các plugin, tôi sẽ cần phải biết nếu tôi đang thực hiện quá trình các lớp học (...) hoặc nếu tôi đang thực hiện quá trình thử nghiệm lớp

AFAIK, đây là not really possible.

Tôi có thể, tất nhiên, tạo hai plugin cho điều này, nhưng loại giải pháp này làm sâu sắc sự nhạy cảm của tôi và có thể chống lại luật ở một số tiểu bang.

Tôi không thấy điều gì sai trái khi có hai mã chia sẻ Mojos nhưng bị ràng buộc với các giai đoạn khác nhau. Một cái gì đó giống như Maven Compiler Plugin (và các mục tiêu compiler:compilecompiler:testCompile).

+0

Vâng, câu trả lời đó của Tiến sĩ J là khá dứt khoát. Tôi phải nói rằng có vẻ khá darn lạ, nhưng những gì evs ... Cảm ơn câu trả lời nhanh chóng. – Hellblazer

+0

Tôi cũng phát hiện ra rằng trình biên dịch Maven của trình biên dịch AspectJ thực hiện điều tương tự như những gì tôi cần làm và vì vậy tôi sẽ xem chúng xử lý như thế nào. – Hellblazer

+0

Vì vậy, mẫu trình biên dịch AspectJ được sử dụng làm việc cho tôi. Đối với hậu thế, tôi chỉ cần tạo hai Mojos trong plugin của tôi, một cho các lớp xử lý và một cho các lớp kiểm tra quá trình. Giải pháp này không yêu cầu một plugin khác (đó là nỗi sợ chính của tôi). – Hellblazer

2

bạn không thể nhận được giai đoạn, nhưng bạn có thể nhận được ID thực thi mà bạn có riêng biệt. Trong plugin:

/** 
* @parameter expression="${mojoExecution}" 
*/ 
private org.apache.maven.plugin.MojoExecution execution; 

... 

public void execute() throws MojoExecutionException 
{ 
    ... 
    System.out.println("executionId is: " + execution.getExecutionId()); 
} 

Tôi không chắc liệu đây có phải là di động cho Maven 3 chưa.

+0

Cảm ơn. Tôi chỉ sử dụng các mô hình mà AspectJ sử dụng và nó hoạt động hoàn toàn tốt đẹp. Không muốn chống lại hạt khi Maven muốn một mô hình cụ thể được sử dụng. – Hellblazer

+0

vâng, đó chắc chắn là cách tốt hơn để xử lý –

0

mã Java Plugin đoạn:

import org.apache.maven.plugin.MojoExecution; 
import org.apache.maven.plugins.annotations.Component; 

... 

@Component 
private MojoExecution execution; 
... 
execution.getLifecyclePhase() 

Sử dụng Maven phụ thuộc (các phiên bản của bạn có thể thay đổi):

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-plugin-api</artifactId> 
    <version>3.3.1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.maven.plugin-tools</groupId> 
    <artifactId>maven-plugin-annotations</artifactId> 
    <version>3.4</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-core</artifactId> 
    <version>3.3.1</version> 
</dependency> 
Các vấn đề liên quan