2016-05-13 99 views
1

我在一个使用maven和gradle的团队中,我有一个希望生成一个运行pom文件的gradle项目,以便我们的maven用户可以继续使用maven。Gradle使用maven插件管理生成的POM上的插件

到目前为止我解决了这个问题,如下产生适当的依赖关系的POM:

的build.gradle摘录:

task createpom(dependsOn: 'build') << { 
    pom { 
     project { 
      groupId project.group 
      artifactId project.name 
      version project.version 
     } 
    }.writeTo("pom.xml") 
} 

build.finalizedBy(createpom) 

这非常适用于创建只是一个POM的依赖关系,但gradle的maven插件API似乎不支持定义<build>标记的内容,我需要为某个成功的Maven构建导入某些插件。

总之,我需要执行下列操作之一:

  • 后处理生成标签到生成的POM。我可以通过直接操作文件来实现,但不愿意。
  • 将POM分为两部分,一部分只有gradle管理的依赖关系,另一部分只包含人工管理的东西。不幸的是,我没有看到任何通过文件名任意命名pom依赖的手段;只有增加一个pom项目或使用多模块构建的解决方案,这两者我都不认为我不需要可共享的父项目或多项目模块项目。我更喜欢类似于<import>my/arbitrary/path/buildstuff.xml</import>的东西,因为所有真正需要做的事情是将同一项目/生命周期的两个POM粘合在一起。

除了目前为止发现的情况,还有更好的方法来完成吗?

回答

0

我使用了XML调整解决方案,该解决方案证明比我预期的更加优雅。实施包括增加非托管POM到我的项目目录来保存生成的人管理的部分,修改我createpom任务,例如:

task createpom(dependsOn: 'build') << { 
    pom { 
     project { 
      groupId project.group 
      artifactId project.name 
      version project.version 
     } 
    }.withXml { 
     def templateXml = (new XmlParser()).parse('pom-unmanaged.xml') 
     asNode().append(templateXml.build) 
    }.writeTo("pom.xml") 
} 

pom-unmanaged.xml采用典型的聚甲醛的形式,减去位是我的gradle构建脚本生成。