我正在创建一个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 install
ed,那么我希望原型生成对的依赖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] 删除。
我来说两句