【问题标题】:Managing common values for multiple Maven archetypes管理多个 Maven 原型的公共值
【发布时间】:2014-04-24 09:12:16
【问题描述】:

我有许多 Maven 原型,结构如下

.
├── bundle
├── bundle-for-jcrinstall
├── initial-content
├── launchpad-standalone
├── launchpad-webapp
├── servlet
└── taglib

对于这些,我想有一个共同价值观的单一来源,例如插件版本,这样我就可以在一个地方为所有模块更改它们。更改应该最终在生成的 pom.xml 中,所以我会定义例如bundle/src/main/resources/archetype-resources/pom.xml包含

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-scr-plugin</artifactId>
            <version>${scrplugin.version}</version>
            <executions>
                <execution>
                    <id>generate-scr-descriptor</id>
                    <goals>
                        <goal>scr</goal>
                    </goals>
                </execution>
            </executions>
  <!-- snip ... -->

然后提供bundle/pom.xml file 中的值,最好是从父 pom 继承。问题是,我不知道如何在 bundle/pom.xml 中提供此值,以便它可用于生成 pom.xml 文件。

任何关于如何做到这一点的想法,或解决此问题的其他方法都非常感谢。

【问题讨论】:

    标签: maven maven-3 maven-archetype


    【解决方案1】:

    资源文件过滤默认是不开启的,所以你必须开启它。

    在你父项目的 pom 中;添加你想要的属性:

    <scrplugin.version>1.14.0</scrplugin.version>
    

    在原型 pom 中,添加资源过滤(假设您使用的是标准 Maven 组织)

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>
        <extensions>
            <extension>
                <groupId>org.apache.maven.archetype</groupId>
                <artifactId>archetype-packaging</artifactId>
                <version>2.2</version>
            </extension>
        </extensions>
    
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-archetype-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    

    这将处理您的 pom 以替换您定义的任何属性;留下任何你不喜欢的东西。这会将属性放入原型的输出 jar 中,因此当您在运行 archetype:generate 命令时使用该原型库时,它将是一个设置版本。

    希望对您有所帮助。

    -停止

    【讨论】:

    • 太好了,谢谢!我一直在努力寻找一种使用 maven-archetype-plugin 执行此操作的方法,但我忘了研究基本的 Maven 机制。
    猜你喜欢
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2019-09-03
    • 2016-10-15
    • 2013-08-15
    相关资源
    最近更新 更多