2009-12-17 17 views
20

Tôi đang tạo các kiểu mẫu Maven 2 cho dự án của chúng tôi (Weld). Tôi muốn có thể kiểm soát các tệp được đặt vào dự án đã tạo dựa trên giá trị của thuộc tính được xác định trong archetype:generate. Ví dụ, tôi thấy trước dấu nhắc sau:Làm cách nào để có điều kiện bao gồm hoặc loại trừ tệp khỏi nguyên mẫu khi dự án được tạo?

Define value for groupId: : com.example 
Define value for artifactId: : myproject 
Define value for package: com.example: : 
Define value for includeGradleSupport: : y 

Dựa trên giá trị của includeGradleSupport, tôi muốn bao gồm (hoặc không bao gồm) file build.gradle trong dự án tạo ra. Nếu người dùng không muốn hỗ trợ Gradle, tôi không muốn làm lộn xộn dự án được tạo ra với các tệp không cần thiết.

Ví dụ khác là tôi có thể cần phải cung cấp một đoạn web Jetty (để kích hoạt trình nghe có lẽ) nếu người dùng muốn hỗ trợ Jetty.

Đó là tất cả về tùy chỉnh dự án dựa trên những gì nhà phát triển dự định sử dụng. Trong khi tôi có thể tạo ra một nguyên mẫu hoàn toàn khác, đôi khi những thay đổi quá nhỏ đến nỗi sẽ dễ dàng thêm/loại trừ một tệp.

Có cách nào để kiểm soát hành vi này bằng cách sử dụng trình mô tả archetype-metadata.xml không?

+1

Theo vấn đề này: http://jira.codehaus.org/browse/ARCHETYPE-58 tính năng này đang được xử lý. Bây giờ chúng tôi chỉ cần xem một số tài liệu cho nó (bao lâu có thể chờ đợi được?) –

+0

Tôi đã làm việc trên một dự án trong một thời gian sử dụng hồ sơ cho loại hành vi này và đã đi nặng và xây dựng và poms của chúng tôi đã vô cùng phức tạp. Cuối cùng chúng ta đã kết luận rằng điều tốt nhất cần làm là thiết lập một cấu trúc dự án mới, nơi mã ứng dụng chính của chúng ta được dựng lên và sau đó các cấu hình triển khai khác nhau là các bản dựng hoàn toàn khác nhau phụ thuộc vào dự án chính. Điều này tạo ra rất nhiều bản dựng và dự án nhưng tất cả chúng đều đơn giản và dễ bảo trì và có một tạo phẩm duy nhất. –

Trả lời

0

Tôi có thể xem xét mã hóa cần thiết để bật tính năng này trong plugin nguyên mẫu.

Tôi nghĩ rằng chiếc xe chính để làm điều này ngày hôm nay sẽ là có điều kiện sản xuất hai hiện vật nguyên mẫu khác nhau trong bản dựng gốc. Người dùng nguyên mẫu sau đó sẽ sử dụng rõ ràng yourarchetype-withthing hoặc yourarchetype-withoutthing.

Tôi biết điều này không hoàn toàn là những gì bạn đang làm sau và tôi đồng ý rằng những gì bạn đang yêu cầu là một trường hợp sử dụng hợp lý.

+2

Hmm, tạo ra nhiều hiện vật từ cùng một dự án sẽ đi ngược lại triết lý của Maven (một dự án => một tạo phẩm). Tôi thực sự nghĩ rằng đây sẽ là một điều hữu ích. Tôi có thể sử dụng vận tốc bên trong một tệp để thay đổi nội dung, nhưng những gì tôi không thể làm là bao gồm hoặc loại trừ toàn bộ các tệp, mà thực sự là phần mở rộng của cùng một ý tưởng đó. Tôi mong đợi nguyên mẫu của bạn;) –

0

Trong khi tôi có thể tạo toàn bộ nguyên mẫu khác, đôi khi những thay đổi quá nhỏ đến mức sẽ dễ dàng bao gồm/loại trừ tệp.

Câu này khiến tôi suy nghĩ ...

Nó có vẻ như bạn có một cấu trúc dự án mặc định.
Giả sử nó lớn, có nhiều tệp. Tất nhiên, bạn không muốn sao chép logic và các tệp trong một nguyên mẫu khác.

Đôi khi, dự án có hành vi bổ sung (liên quan đến Gradle).
Âm thanh này là trường hợp sử dụng điển hình cho một kiểu mẫu khác không bắt đầu từ nguyên mẫu nào, nhưng xuất hiện sau mẫu đầu tiên. Tôi đã nhìn thấy một số ví dụ về các kiểu mẫu như vậy trên web. Các developper kích hoạt nguyên mẫu này chỉ khi dự án cần Graddle. :-)

Vì vậy, tôi đề nghị: tạo kiểu mẫu trang trí của bạn, chỉ thêm các tệp có liên quan đến Graddle.

+0

Bạn có nói rằng chúng ta nên có cái được gọi là nguyên mẫu "một phần" mà lớp trên một dự án hiện có (có lẽ được tạo bởi kiểu mẫu cơ sở)? Điều đó vẫn có vẻ như quá nhiều công việc cho nhà phát triển cuối cùng. Họ không muốn chạy hai nguyên mẫu: tạo các lệnh, họ muốn chạy một. Nếu, mặt khác, bạn đang gợi ý rằng chúng ta tạo ra một nguyên mẫu thứ hai kết hợp trong các tệp bổ sung vào một nguyên mẫu cơ sở, với tôi phá vỡ quy ước trong Maven nơi một dự án tạo ra một tạo phẩm. Có lẽ nếu nguyên mẫu có thể kéo vào các tệp được chia sẻ thì đó sẽ là một khả năng khác. –

+0

@Tôi đã đề xuất giải pháp nguyên mẫu một phần :-). Tôi tin rằng sự phức tạp về khái niệm là như nhau đối với người phát triển cuối cùng, bởi vì anh ta phải biết hai khái niệm trong mọi trường hợp. Trong việc thực hiện, bạn có thể đảm bảo rằng anh ta không phải gõ nhiều hơn ;-). Ngoài ra, nó sẽ dễ dàng để kết nối các cuộc gọi đến hai bằng một lệnh duy nhất nếu cần thiết, phải không? – KLE

1

Cá nhân tôi sẽ di chuyển các bộ phận mà có thể được gỡ bỏ/bổ sung theo yêu cầu người dùng và đưa vào khác nhau maven profiles do đó, u có thể xây dựng một phần khác nhau sử dụng cấu hình khác nhau

+0

Vâng, đó chắc chắn là một cách tiếp cận hợp lệ. Nhưng trong trường hợp của chúng tôi, chúng tôi muốn giảm thiểu sự phức tạp của dự án được tạo ra vì lý do khả năng sử dụng. Khi nhà phát triển chọn cấu hình servlet, ví dụ, chúng tôi muốn xây dựng đó để chỉ phù hợp với kịch bản duy nhất đó. –

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