0

我正在尝试将 jmockit-coverage-0.994.jar 依赖项从项目中移出到默认情况下未激活的某个配置文件,但无法将其插入配置文件依赖项的结果类路径的开头。

4

4 回答 4

1

从版本 2.0.9 开始,Maven 以与您的 pom.xml 中列出的相同方式对您的依赖项进行排序。话虽如此,一旦您开始从配置文件中合并依赖项,这一切都变得不平凡。您可能想检查您的有效 pom 以查看订单的外观:

mvn help:effective-pom -Pprofile

如果结果很糟糕,那么一种解决方法是使用dependency:build-classpath。另一种解决方案是使用范围而不是配置文件来执行包含。

于 2009-12-16T12:38:33.710 回答
1

从 Maven 2.0.9 开始,在构建类路径时确实保留了依赖的自然顺序,如 2.0.9 的发行说明中所述:

MNG-1412 / MNG-3111引入了类路径上依赖项的确定性排序。过去,使用自然集排序,这会导致奇怪的结果。现在从您的 pom 中保留了顺序,最后添加了由继承添加的依赖项。在具有冲突或重复依赖项的构建中,这可能会导致输出发生更改。简而言之,如果您对 2.0.9 有奇怪的问题,请查看依赖项,看看您是否在某处有冲突。

因此,通过在 POM 中按依赖顺序进行操作,您实际上可以操纵类路径(在使用配置文件时这可能会变得更加棘手,但是由于您没有提供有关实际问题的详细信息,因此很难提供更多指导)。

于 2009-12-16T19:08:15.033 回答
0

我已经回滚了上面使用活动配置文件的黑客,因为找到了更优雅的方式来解决我的问题。

问题的根源是传递依赖,因为使用了一些我的 testutils 模块,它对 JUnit 具有编译范围依赖(必须在类路径中的 JMockit 之后),而在父 POM 中,测试依赖定义如下:

...
<dependencies>
    <dependency>
        <groupId>mockit</groupId>
        <artifactId>jmockit</artifactId>
        <version>0.994</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.7</version>
        <scope>test</scope>
    </dependency>
</dependencies>
...
    <profiles>
    <profile>
        <id>coverage</id>
        <dependencies>
            <dependency>
                <groupId>mockit</groupId>
                <artifactId>jmockit-coverage</artifactId>
                <version>0.994</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </profile>
...

找到的解决方案是将 JUnit 范围从测试替换为提供。

这是更好的技巧吗?

于 2009-12-17T15:29:44.907 回答
0

很抱歉对自己的问题有很多答案...

但是现在不需要任何 maven deps 的技巧,因为 jmockit-coverage 的运行现在可以通过系统属性进行配置。请参阅0.955 版本相关问题 22的发行说明。

于 2009-12-21T09:02:42.237 回答