2012-06-26 28 views
8

Tôi đang nghĩ đến việc chuyển sang Gradle. Tuy nhiên, tôi có một số plugin Maven cần được hỗ trợ trong tương lai gần.Tạo các plugin Maven bằng Gradle

Có cách nào để xây dựng các plugin Maven bằng Gradle không?

Trả lời

-1

Hiện tại tính năng này không được hỗ trợ nhưng trên số development roadmap. Kiểm tra từng lần một roadmap dashboard để xem trạng thái có thay đổi hay không.

+1

Mục tiêu của chúng tôi là hỗ trợ thêm _reuse_ các plugin Maven từ Gradle, thay vì hỗ trợ _build_ chúng. –

+0

Tôi hiểu. Tôi nghĩ tôi đã hiểu sai câu hỏi. –

+0

liên kết bảng điều khiển lộ trình không còn hoạt động – Matthew

0

Tôi không biết plugin Gradle của bên thứ ba cho phép tạo plugin Maven. Một khả năng là gọi Maven để làm một phần công việc (đặc biệt là tạo siêu dữ liệu). POM cần thiết có thể được tạo ra khi đang bay. Một khả năng khác là cam kết siêu dữ liệu để kiểm soát nguồn và cập nhật nó theo cách thủ công (có thể bằng cách chạy Maven khi cần). Cuối cùng nhưng không kém phần quan trọng bạn có thể viết một số mã thực hiện tạo siêu dữ liệu ở phía Gradle, có thể sử dụng lại một số mã Maven.

+0

Quá xấu này không được lên kế hoạch. Chúng ta hãy xem nếu một workaround tốt quay lên ... –

3

Here's something mà làm việc cho tôi:

  • Sau khi biên dịch nguồn Plugin của tạo POM của dự án: "install.repositories.mavenInstaller.pom.writeTo('pom.xml')"
  • patch POM tạo ra và cung cấp plugin tọa và thư mục đích chính xác
  • Run "mvn org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor"

Bằng cách này, "build/classes/main/META-INF/maven/plugin.xml" được tạo và sau đó được đóng gói đúng cách bởiNhiệm vụ, đó là tất cả những gì cần thiết cho tệp jar để trở thành một plugin Maven, AFAIK. Ngoài ra, tôi tin rằng, "maven-plugin-annotations" nên được sử dụng trong plugin.

task pluginDescriptor(type: Exec) { 
    commandLine 'mvn', '-e', '-B', 'org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor' 
    doFirst { 
     final File pom = project.file('pom.xml') 
     install.repositories.mavenInstaller.pom.writeTo(pom) 
     assert pom.file, "[$pom.canonicalPath] was not created" 

     pom.text = pom.text. 
      replace('<groupId>unknown</groupId>',    "<groupId>${project.group}</groupId>"). 
      replace('<artifactId>empty-project</artifactId>', "<artifactId>${project.name}</artifactId>"). 
      replace('<version>0</version>',     """ 
                   |<version>${version}</version> 
                   | <packaging>maven-plugin</packaging> 
                   | <build> 
                   | <directory>\${project.basedir}/build</directory> 
                   | <outputDirectory>\${project.build.directory}/classes/main</outputDirectory> 
                   | </build> 
                   |""".stripMargin().trim()) 
    } 
    doLast { 
     final pluginDescriptor = new File((File) project.compileGroovy.destinationDir, 'META-INF/maven/plugin.xml') 
     assert pluginDescriptor.file, "[$pluginDescriptor.canonicalPath] was not created" 
     println "Plugin descriptor file:$pluginDescriptor.canonicalPath is created successfully" 
    } 
} 

project.compileGroovy.doLast{ pluginDescriptor.execute() } 
+1

Cảm ơn rất nhiều. Dựa trên điều này, tôi đã tạo phiên bản sau không cần thay thế: https://gist.github.com/fikovnik/ffc1fed1867bc7fa679aaf8e48f00c21 – fikovnik

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