是否有生成POM.xml文件的Java类?

在我的工作项目中,我最近被要求通过java类生成POM文件。 问题是我对Maven非常非常新(就像去年12月一样)。

我需要的是一个生成xml文件的某种代码(一个pom文件,但如果我可以配置任何xml创建代码,那将是好的)给定所有必要的数据,所以他们不需要手动编写它。 我不知道我是否在解释自己,但问题是,是否有任何库或类生成或构造具有给定数据的POM文件? 如果不是那么好,我只是不想花更多的时间来寻找我不知道的东西,如果它甚至存在,或者是否像宣告一个POM对象那样简单然后做一个简单的文档d = generatePom(POM p)。 既然没有人抱怨写POM文件有多难,我应该有一个简单的方法来做它们但我想我已经迷失了很多API javadoc并且我找不到回头路。

我的想法是,如果没有代码,那就是搜索POM字典(覆盖所有元素)并使用XML生成器创建一个带有给定POM对象的xml文件(我以前填充了我提供的数据)例如JDOM,XOM或XStream。 如果没有已经完成此课程的课程(比如’嘿!你这样做错了’),任何对此的想法都会受到赞赏。

PS:我已经读过Eclipse项目正在做一些Maven的事情,并且有一个API可以为你拥有的实际项目生成一个pom.xml文件。 如果我可以覆盖输入数据或其他东西,这将是一件好事。

谢谢大家!

这取决于你想要做什么。 如果你只是想为一个肯定类型的新项目创建POM,最好的方法是通过Maven原型(你可以用你想要的模板创建自己的原型)。

如果您确实需要以编程方式编写POM,则可以使用以下命令:

import org.apache.maven.model.*; import org.apache.maven.model.io.xpp3.MavenXpp3Writer; ... Model model = new Model(); model.setGroupId( "some.group.id" ); ... new MavenXpp3Writer().write( w, model ); 

…其中w是java.io.Writer并添加了所有必要的exception处理。

Javadoc就在这里: http : //maven.apache.org/ref/2.2.1/maven-model/apidocs/index.html

要访问此API,您应该添加此依赖项:

  org.apache.maven maven-model 2.2.1  

还有一个相应的读取API,但请记住,它不会执行所有Maven操作,例如inheritance和插值(为此需要更高级的API使用)。

  MavenXpp3Reader reader = new MavenXpp3Reader(); Model pomModel = reader.read(new FileReader(pomLibFile)); final List dependencies= pomModel.getDependencies(); final List modules= pomModel.getModules(); final List profiles = pomModel.getProfiles(); InputStream inputStream = new FileInputStream(new File(pomLibFile)); StringWriter writer = new StringWriter(); IOUtils.copy(inputStream, writer, "utf-8"); pomModel.getDependencyManagement(); final Properties properties = new Properties(); properties.load(new FileInputStream(pomProperties)); RegexBasedInterpolator interpolator = new RegexBasedInterpolator(); interpolator.addValueSource( new EnvarBasedValueSource() ); interpolator.addValueSource( new PropertiesBasedValueSource( properties ) ); List synonymPrefixes = new ArrayList(); synonymPrefixes.add( "project." ); synonymPrefixes.add( "pom." ); PrefixedValueSourceWrapper modelWrapper = new PrefixedValueSourceWrapper( new ObjectBasedValueSource( pomModel ),synonymPrefixes, true ); interpolator.addValueSource( modelWrapper ); PrefixedValueSourceWrapper pomPropertyWrapper = new PrefixedValueSourceWrapper( new PropertiesBasedValueSource( pomModel.getProperties() ), synonymPrefixes, true ); interpolator.addValueSource( pomPropertyWrapper ); interpolator.addValueSource( new PropertiesBasedValueSource( properties ) ); RecursionInterceptor recursionInterceptor = new PrefixAwareRecursionInterceptor( synonymPrefixes, true ); String serializedPOM = interpolator.interpolate( writer.toString(), recursionInterceptor ); System.out.println("-------- "+serializedPOM);; 

参考: http : //plexus.codehaus.org/plexus-components/plexus-interpolation/index.html

虽然如果我必须添加多个(未知数量)依赖项,我仍然会陷入困境。

为什么你必须在java中而不是使用m2eclipse等现有工具。
请参阅使用m2eclipse为现有项目创建POM的指南 。

您还可以看到m2eclipse开发人员指南 ,它将让您查看其实现的源代码。

回复 – –
这是在尝试对项目进行编组时遇到的常见问题。
最大的障碍是尝试识别正确的maven坐标 。
项目通常是指重命名的jar文件,其中group-id和版本号已被删除。

有时检查jar文件中的清单会给出一些关于正确依赖工件的提示。

要生成具有多个依赖项的pom,可以使用以下示例代码:

 Model model = new Model(); Writer writer = new FileWriter("C:/GRADLE_WORKSPACE/test.pom"); List dependencyList = new ArrayList(); model.setGroupId( "TestGroupArtifactID" ); model.setArtifactId("TestGroupArtifactName"); model.setVersion("1.0.0"); Dependency dep = new Dependency(); dep.setGroupId("TestGroupId"); dep.setArtifactId("TestDependencyName"); dep.setVersion("1.0.0"); dependencyList.add(dep); Dependency dep2 = new Dependency(); dep2.setGroupId("TestGroupId2"); dep2.setArtifactId("TestDependencyName2"); dep2.setVersion("2.0.0"); dependencyList.add(dep2); //model.addDependency(dep); model.setDependencies(dependencyList); new MavenXpp3Writer().write(writer, model ); writer.close(); 

问候,
Srikanth Praveen