Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何告诉maven更喜欢快照版本而不是增量版本?_Java_Maven_Versioning_Dependency Management - Fatal编程技术网

Java 我如何告诉maven更喜欢快照版本而不是增量版本?

Java 我如何告诉maven更喜欢快照版本而不是增量版本?,java,maven,versioning,dependency-management,Java,Maven,Versioning,Dependency Management,因为我的增量版本号=CI版本号,所以我不想将增量版本号放入我的开发POM中。它应该只有主版本和次版本组件 POM中的版本=例如1.1-SNAPSHOT 版本=例如1.1.23 但是,同一框架中的另一个组件会说“如果快照版本在本地存在,请使用该版本,否则请使用最新的增量版本” 如何在POM中指定此项 我试过这个: <dependencies> <dependency> <groupId>com.example.ajb.versionp

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

  • POM中的版本=例如1.1-SNAPSHOT
  • 版本=例如1.1.23
但是,同一框架中的另一个组件会说“如果快照版本在本地存在,请使用该版本,否则请使用最新的增量版本”

如何在POM中指定此项

我试过这个:

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

com.example.ajb.versionpoc
下游的
[1.1-快照],[1.1,2.0)

但它不起作用。它仍然解析版本,例如1.1.23。我如何告诉Maven更喜欢快照版本?

我不太明白您想做什么,但一般情况如下:

  • 仅在开发中使用快照。切勿将其置于范围内
  • 您的范围表达式必须包含两个参数。您有两个范围和三个参数
  • 仅为稳定版本提供范围

  • 根据@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>
    
    
    地方的
    ${user.home}/.m2/repository/mygroup/myartifact/myversion SNAPSHOT/myartifact-myversion-SNAPSHOT.jar
    mygroup
    我的神器
    myversion快照
    释放
    ${user.home}/.m2/repository/mygroup/myartifact/myversion SNAPSHOT/myartifact-myversion-SNAPSHOT.jar
    mygroup
    我的神器
    我的版本
    
    我认为实现这一点的最佳方法是通过@DB5。我熟悉Maven配置文件,但我认为没有一种方法可以根据特定依赖关系的存在与否触发配置文件?4.嗨,Michael,(1)是的,我只在开发中使用快照。但是如果我不将它们放在一个范围内,我如何解决我的问题?(2)一个范围表达式可以包含两个或一个参数,也可以包含多个范围,请参见(3)不确定这意味着什么。我不想设置“范围”对于快照版本,我只是尝试使用范围语法来实现我的目标。Hi@Tunaki,这取决于更新版本的频率。在我的情况下,版本必须每天在POM中手动更新多次,因为我们处于连续交付模式中。我理解您正在尝试做什么,但这是一个解决方案有点古怪…(1)如果用户指定了不同的存储库位置(由于下游团队发布了同一版本的多个变体,我自己也这样做过),(2)如果代码是从IDE中的源代码构建的,而实际上不存在于存储库中,该怎么办(实际上这是一个非常正常的用例),(3)不确定这是否以独立于平台的方式工作(Windows/UNIX路径约定)我的答案是:1)您可以在配置文件中指定存储库。2)在这种情况下,您可以在适当的依赖项中指定scope=system路径。3)为什么不呢?
    存在
    缺少
    路径是用Unix表示法指定的,但我自己在Windows中对它们进行了测试,结果正常。去试试吧。(也许我应该回答说你的问题本身有点古怪,但是,呃…:-)