2010-09-17 20 views
58

Tôi đã tạo thành phần Plexus để chứa logic chung cho một số Mojos mà tôi muốn tạo. Tôi đã có thể chuyển các thông tin như localRepository và dự án từ Mojo (và các trường hợp kiểm tra).Cách lấy MavenSession hoặc MavenExecutionRequest hiện tại từ một thành phần Plexus

Tôi đã tự hỏi liệu có cách nào để có được các số hoặc MavenExecutionRequest từ bên trong thành phần mà không phải chuyển chúng dưới dạng thông số từ Mojo hay không. Tôi biết thành phần của tôi sẽ chạy từ Mojo Maven.

Tôi đang sử dụng Maven 2 trong trường hợp này.

+0

Tôi biết câu hỏi khá cũ. Thomas, bạn có muốn "tái sử dụng" phiên giống hệt nhau trong nhiều giai đoạn hay bạn chỉ cần tham chiếu đến MavenSession hiện tại của giai đoạn? –

+0

Hmm .. nếu có, tôi đoán nó sẽ không được thread an toàn nữa. – eckes

Trả lời

1

Tôi không tin là có, tôi cũng không nghĩ đó là một ý hay.

Từ sự hiểu biết của tôi, những gì bạn đang hướng tới để đạt được là có một thành phần giống như commons, sẽ được sử dụng cho một số mojos. Điều này yêu cầu phiên Maven hiện tại phải được chuyển vào & được sử dụng để sau đó trả về một giá trị.

Cách Maven hoạt động tuy nhiên, là nó chạy các mục tiêu từ các plugin trong một môi trường gần giống như vùng chứa. Mỗi plugin được phép hoạt động trong một số Maven Phase cụ thể, như được xác định bởi <executions />. Điều này cho phép Maven tách biệt các phức tạp của việc xây dựng, thử nghiệm, kiểm tra, triển khai v.v. Gọi số mvn clean install, trừ khi tôi nhầm lẫn, là hai lần thực thi riêng biệt, một để chạy cleanbuild lifecycle, tiếp theo là install.

Do đó không an toàn để giả định rằng và MavenExecutionRequest tiếp theo đại diện cho cùng một phiên bản được sử dụng trong cuộc gọi trước đó. clean là một cuộc gọi riêng biệt, có logic không nên được duy trì trong một phiên mới. Vì vậy, những gì tôi về cơ bản nói, là trong khi có một thành phần plexus phổ biến là một thực hành tốt, đặc biệt để duy trì tính thống nhất trên mojos của bạn, nó là thực hành đúng (gần như ioc), để cung cấp các phiên thích hợp mỗi lần .

Tôi hy vọng đó là câu trả lời bạn đang tìm kiếm. Khá dài, nhưng để hiểu lý do tại sao bạn cần cung cấp phiên, hãy suy nghĩ Maven.