如何在Maven原型中嵌入原型项目版本?

共同切片:

我正在创建一个Maven原型,该原型将生成一个项目骨架,其中将包括对原型起源的项目的依赖。

例如,原始项目看起来像:

origin/archetype/... archetype for generating project 
      /core/... core services 
      /extra/... extra services 

然后原型将生成一个带有POM的项目,该项目包含如下所示的依赖项:

<dependencies> 
  <dependency> 
    <groupId>com.foo</groupId> 
    <artifactId>origin-core</artifactId> 
    <version>SOMEVERSION</code> 
  </dependency> 
</dependencies> 

我希望在原型被构建并安装到存储库中时,SOMEVERSION成为原始项目的版本。

因此,如果原始项目的版本为1.0-SNAPSHOT且为mvn installed,那么我希望原型生成对的依赖origin-core 1.0-SNAPSHOT当原始项目发布并自动升到1.0版时,我希望原型可以生成对的依赖origin-core 1.0

基本上,我想${archetypeVersion}在原型POM中用作Velocity变量,但这似乎是不可能的。

还有其他方法可以完成我在这里要做的事情吗?

共同切片:

我几天前在Maven邮件列表中问了上述问题,并得到了风滚草。幸运的是,我最终自己解决了这个问题。这是完成此操作的至少一种理智的方法:

src/main/resources/archetype-resources/pom.xml在构建原型时,对文件使用Maven筛选来替代当前项目版本。

这样做的方法如下:

修改archetype/pom.xml文件以对文件进行过滤archetype-resources/pom.xml,而不对其他任何文件进行过滤(因为原型文件自然会${variable}在整个地方都有s,并且您不希望在构建时替换这些文件,因此希望在原型时替换它们被建造)。

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
    <includes>
      <include>archetype-resources/pom.xml</include>
    </includes>
  </resource>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>false</filtering>
    <excludes>
      <exclude>archetype-resources/pom.xml</exclude>
    </excludes>
  </resource>
</resources>

启用转义字符以供过滤时使用,以便您可以转义原型pom中所有需要保持原样的变量,以便可以在原型生成时替换它们:

<pluginManagement>
  <plugins>
    ...
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.5</version>
      <configuration>
        <escapeString>\</escapeString>
      </configuration>
    </plugin>
  </plugins>
</pluginManagement>

(请注意,上面显示<resources><pluginManagement>元素应放置在<build>POM 元素内。)

使用${project.version}在你的原型POM,在那里你要插入你的原型项目的版本,并逃避了应保持取代的,直到原型生成时间的其他变量:

<?xml version="1.0" encoding="UTF-8"?>
<project ...>
  <modelVersion>4.0.0</modelVersion>

  <groupId>\${groupId}</groupId>
  <artifactId>\${artifactId}</artifactId>
  <version>\${version}</version>
  <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>com.foo</groupId>
      <artifactId>origin-core</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>

</project>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章