2011-10-10 21 views
38

Tôi đã nhìn vào Gradle và trông khá thú vị. Tôi nghĩ rằng việc có thể viết các kịch bản của bạn bằng bất kỳ ngôn ngữ nào khác ngoài XML là khá thú vị, và tôi không rõ liệu các tệp POM Maven đa ngôn ngữ vẫn là một lựa chọn khả thi hay không.Di cư từ Maven 2/3 đến Gradle

Tôi đang làm việc trên một dự án sử dụng Maven 2.2.1 làm công cụ xây dựng. Dự án này:

  • là đa mô-đun
  • sử dụng (cũng của chính chúng ta) plugins
  • dựa vào một kho lưu trữ Artifactory Proxy

Có bất kỳ kinh nghiệm hiện có trên di cư từ Maven để Gradle ? Gotchas, điểm đau, góc trường hợp? Bất kỳ loại kinh nghiệm nào cũng được hoan nghênh.

Trả lời

34

Việc di chuyển từ Maven sang Gradle không dễ như từ Ant đến Maven (ít nhất là vào lúc này). Bạn có thể dễ dàng reuse Ant scripts và biến họ thành công dân hạng nhất trong bản dựng Gradle của bạn. Có một nhiệm vụ trên Gradle roadmap cho deep import of Maven builds.

Cho đến nay tôi đã di chuyển hai doanh nghiệp xây dựng Maven sang Gradle. Cả hai đều là các dự án đa mô-đun sử dụng các plugin Maven tiêu chuẩn. Tôi về cơ bản viết lại việc xây dựng Gradle cách mà đòi hỏi ít nhất một số kiến ​​thức về Gradle. Dựa trên kinh nghiệm của tôi, bạn có thể dễ dàng có được cùng một bản dựng đang chạy trong Gradle. Gradle không thực sự đóng hộp bạn ở đây và khá linh hoạt. Trên đường đi, bạn có thể thấy mình phải viết một plugin tùy chỉnh chưa tồn tại tùy thuộc vào những plugin Maven bạn đang sử dụng. Tuy nhiên, đã có wide breath of plugins ngoài kia. Cho đến nay tôi đã không chạy vào một rào cản thực sự được nêu ra. Mặc dù các tài liệu Gradle là khá tốt, bạn có thể thấy mình đọc rất nhiều bài viết diễn đàn Gradle để tìm ra giải pháp cho một trong những vấn đề của bạn. Một số tính năng Maven tiêu chuẩn không được hỗ trợ out-of-the-box ví dụ: một phạm vi provided hoặc WAR inplace. Tuy nhiên, có những cách dễ dàng xung quanh nó. Tôi đã không sử dụng kho chứa Artifactory. Những cái tôi xử lý là kho chứa Nexus. Theo như tôi biết các chàng trai Gradle có hỗ trợ tốt cho Artifactory mặc dù. Chỉnh sửa: JFrog cung cấp Artifactory Gradle plugin.

Cách tốt nhất để bắt đầu là sử dụng công cụ di chuyển Maven2Gradle để bạn tạo tập lệnh Gradle từ bản dựng Maven của bạn. Cá nhân, tôi chưa sử dụng nó. Tôi đã xây dựng Gradle bên cạnh với công trình Maven mà không gây ra rắc rối nào. Maven đặt đầu ra dưới target, Gradle dưới build. Hãy chắc chắn rằng bạn chuẩn bị nhóm của bạn cho sự thay đổi. Hãy để họ thử xây dựng Gradle và làm quen với công cụ này.

Khi bạn di chuyển hoàn toàn, bạn sẽ rất hài lòng về khả năng bảo trì và khả năng mở rộng của bản dựng. Rất dễ dàng để thêm logic xây dựng tùy chỉnh và bạn sẽ biết ơn rằng bạn đã rời khỏi vùng đất XML. Về mặt hiệu suất, bạn sẽ không quay lại một bước nữa. Các tính năng xây dựng gia tăng hiện công việc của mình rất tốt.

+2

Các Gradle plugin chiến tranh hiện nay (tức là trong Gradle 1.0-milestone-6) hỗ trợ hai cấu hình bổ sung: compileProvided và runtimeProvided. –

+2

Thật không may, điều này không giúp bạn nếu dự án của bạn không áp dụng các plugin WAR. Bạn vẫn phải xác định cấu hình 'được cung cấp' của riêng mình. Điều này vẫn còn được thảo luận một cách controverisally trong cộng đồng Gradle, v.d. xem [vé JIRA] này (http://issues.gradle.org/browse/GRADLE-784). –

11

Bạn cũng có thể muốn đọc qua số this write-up trải nghiệm của mình khi chuyển dự án maven sang màu.

+8

Bạn có thể thêm bản tóm tắt tại đây, trong trường hợp trang web của bạn không hoạt động? –

1

Bạn luôn có thể thay đổi buildDir'target' dưới gradle nếu bạn muốn xây dựng đầu ra để đi theo 'target' thay vì 'build' như maven:

buildDir = 'target' 
1

maven2Gradle dường như đã được thay thế bằng việc có thể để chạy gradle init từ dòng lệnh (mặc dù nó là một tính năng khá thử nghiệm). Dường như nó hoạt động tốt để thực hiện một số thiết lập Gradle cơ bản từ một dự án Maven.

8

Trong thư mục, nơi bạn có pom.xml chỉ cần chạy lệnh dưới đây:

gradle init --type pom

này nên chuyển đổi pom.xml maven của bạn để build.gradle