Java 未能获得100%的保险

Java 未能获得100%的保险,java,spring,maven,maven-cobertura-plugin,maven-enforcer-plugin,Java,Spring,Maven,Maven Cobertura Plugin,Maven Enforcer Plugin,我正在与spring合作,并使用mvn站点检查我的测试覆盖率和应用程序依赖收敛性,我得到[Error]Error您没有100%收敛性 Dependencies used in modules org.slf4j:slf4j-api 1.7.25 com.epam.brest.course:rest-producer:war:1.0-SNAPSHOT \- com.jayway.jsonpath:json-path:jar:2.3.0:test \- (org.slf4j:slf4j-

我正在与spring合作,并使用mvn站点检查我的测试覆盖率和应用程序依赖收敛性,我得到[Error]Error您没有100%收敛性

Dependencies used in modules
org.slf4j:slf4j-api

1.7.25  
com.epam.brest.course:rest-producer:war:1.0-SNAPSHOT
\- com.jayway.jsonpath:json-path:jar:2.3.0:test
   \- (org.slf4j:slf4j-api:jar:1.7.25:test - omitted for conflict with 1.7.5)

1.7.5   
com.epam.brest.course:rest-producer:war:1.0-SNAPSHOT
\- net.sf.dozer:dozer:jar:5.5.1:compile
   +- org.slf4j:slf4j-api:jar:1.7.5:compile
   \- org.slf4j:jcl-over-slf4j:jar:1.7.5:compile
      \- (org.slf4j:slf4j-api:jar:1.7.5:compile - omitted for duplicate)
我说问题出在模块rest producer中的slf4g版本上 但是我在本模块中看不到我的版本有任何问题,下面就是

休息制作人

<dependency>
    <groupId>com.epam.brest.course</groupId>
    <artifactId>service</artifactId>
</dependency>

<dependency>
    <groupId>net.sf.dozer</groupId>
    <artifactId>dozer-spring</artifactId>
</dependency>

<dependency>
    <groupId>net.sf.dozer</groupId>
    <artifactId>dozer</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>com.epam.brest.course</groupId>
    <artifactId>utility</artifactId>
</dependency>

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
</dependency>


com.epam.brest.course
服务
net.sf.推土机
推土机弹簧
net.sf.推土机
推土机
org.springframework
SpringWebMVC
com.fasterxml.jackson.core
杰克逊数据绑定
javax.servlet
javax.servlet-api
org.apache.logging.log4j
log4japi
org.apache.logging.log4j
log4j型芯
org.apache.logging.log4j
log4jcl
朱尼特
朱尼特
测试
org.hamcrest
汉克雷斯特酒店
测试
com.jayway.jsonpath
json路径
测试
com.epam.brest.course
效用
javax.validation
验证api
org.mockito
莫基托所有

并且我的父模块有这样的版本
UTF-8
1.4.196
4.3.14.1发布
2.10.0
3.0.8.1发布
1.0-快照
3.0.1
2.9.4
1.1.0.1最终版本
1.3
2.3.0
4.12
5.1.3.最终版本
5.5.1
1.9.5
我能得到一些关于它可能是什么的建议吗,这个项目大约有9个模块

我使用的是jsonPath,它有一个依赖项

 <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
      <scope>compile</scope>
 </dependency>

org.slf4j
slf4j api
1.7.25
编译
我正在使用的推土机也有

<dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>${slf4j.version}</version>
      <scope>test</scope>
    </dependency>

org.slf4j
slf4j简单
${slf4j.version}
测试

版本是不同的,我认为这是问题所在,但我能做些什么来排除其中一个版本或更改其依赖项的版本

我认为您得到的错误是由于您的依赖项中有相同工件的两个版本。尝试将
slf4j api
json路径
依赖项中排除,以强制项目仅依赖于版本
1.7.5

 <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
      <scope>compile</scope>
 </dependency>
<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
         </exclusion>
    </exclusions>
</dependency>

com.jayway.jsonpath
json路径
测试
org.slf4j
slf4j api

您也可以在
推土机
依赖项上执行相同的排除。但是,我觉得在这里这样做更安全,因为这是只用于测试的依赖关系。

“100%收敛”。你是说保险范围吗?请注意,100%的覆盖率几乎是不可能实现的,或者至少会导致投入时间来实现100%的覆盖率是不值得的,或者只会导致为了提高覆盖率而创建测试,而测试本身在检查代码的正确性方面没有任何实际价值。度量驱动的开发不是正确的工作方式。你应该把缺少一段代码的覆盖作为一种暗示,如果必要的话,你可能想添加更多的测试,这本身不应该是一个目标。@markrottveel我说的是收敛,但是对于测试,我有47%,我实际上测试了所有重要的东西,包括集成和单元测试,所以我想47%是可以的,我仍然认为你的意思是覆盖率,否则我不理解你的意思。收敛到底是什么意思?所以当我运行mvn站点和mvn站点:stage and access index.html时,我会在依赖关系报告中看到—您并没有100%的收敛。因为您的模块有一个依赖项和两个版本,因为它还没有准备好部署