我怎么能告诉maven更喜欢SNAPSHOT版本而不是增量版本?

时间:2015-09-30 10:30:12

标签: java maven versioning dependency-management

因为我的增量版本号= CI版本号,所以我不想将增量版本号放入我的开发POM中。它应该只有主要和次要版本组件。

  • POM中的版本=例如1.1-SNAPSHOT
  • 发布版本=例如1.1.23

但是,同一框架中的另一个组件将要说“如果SNAPSHOT版本存在于本地,请使用它,否则使用最新的增量版本”。

如何在我的POM中指定这个?

我试过了:

<dependencies>
    <dependency>
        <groupId>com.example.ajb.versionpoc</groupId>
        <artifactId>downstream</artifactId>
        <version>[1.1-SNAPSHOT],[1.1,2.0)</version>
    </dependency>
</dependencies>

但它不起作用。它仍然将版本解析为例如1.1.23。我怎么能告诉Maven更喜欢SNAPSHOT版本?

2 个答案:

答案 0 :(得分:0)

我并不清楚你想要做什么,但这是一般性协议:

  1. 仅在开发中使用快照。 从不将它们放在范围内。
  2. 您的范围表达式必须包含两个参数。你有两个范围,有三个。
  3. 仅为稳定版本提供范围。

答案 1 :(得分:0)

基于@ DB5关于配置文件的建议,我认为您可以声明一个包含快照依赖关系的特定配置文件。可以根据本地存储库中该库的存在来激活此类配置文件。

在你的pom的profiles部分添加这个片段:

    <profile>
        <!--This profile will prefer the SNAPSHOT version if it exists locally-->
        <id>local</id>
        <activation>
            <file>
                <exists>${user.home}/.m2/repository/mygroup/myartifact/myversion-SNAPSHOT/myartifact-myversion-SNAPSHOT.jar</exists>
            </file>
        </activation>
        <dependencies>
            <dependency>
                <groupId>mygroup</groupId>
                <artifactId>myartifact</artifactId>
                <version>myversion-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </profile>

    <profile>
        <!--This profile will prefer the released version if the SNAPSHOT does not exist locally-->
        <id>released</id>
        <activation>
            <file>
                <missing>${user.home}/.m2/repository/mygroup/myartifact/myversion-SNAPSHOT/myartifact-myversion-SNAPSHOT.jar</missing>
            </file>
        </activation>
        <dependencies>
            <dependency>
                <groupId>mygroup</groupId>
                <artifactId>myartifact</artifactId>
                <version>myversion</version>
            </dependency>
        </dependencies>
    </profile>