java – Maven / eclipse,eclipse如何尊重maven运行时范围?

在pom.xml中,我包含logback& SLF4J如下所示,使用maven build可以很好地工作.如果我直接从logback导入,它将给出编译错误.

    <dependencyManagement>
          <dependencies>
                 <!-- We want to have slf4j with scope compile -->
                 <dependency>
                       <groupId>org.slf4j</groupId>
                       <artifactId>slf4j-api</artifactId>
                       <version>1.7.6</version>
                 </dependency>
          </dependencies>
   </dependencyManagement>
   <dependencies>
          <!-- logback we only want runtime, compiletime we want SLF4J -->
          <dependency>
                 <groupId>ch.qos.logback</groupId>
                 <artifactId>logback-classic</artifactId>
                 <version>1.1.2</version>
                 <scope>runtime</scope>
          </dependency>
   </dependencies>

但是我如何让eclipse尊重logback依赖的运行时范围并阻止那里的import-advice?

最佳答案 不幸的是,似乎不可能在Eclipse上进行正常构建,正如@ A4L所提到的,这是一个已知的bug,检查
Bug 414645
Bug 376616.Eclipse(m2e)无法正确管理Maven依赖范围.

但是,如果将运行时依赖项放在概要文件上,则Eclipse不会将它们添加到类路径中(但默认情况下,概要文件不应处于活动状态).我刚刚在Eclipse Mars上测试过,它运行得很好.

因此,在您的情况下,您可以添加到您的POM:

<profiles>
    <profile>
        <id>runtime</id>
        <dependencies>
            <dependency>
               <groupId>ch.qos.logback</groupId>
               <artifactId>logback-classic</artifactId>
               <version>1.1.2</version>
               <scope>runtime</scope>
            </dependency>
        </dependencies>
    </profile>
</profiles>

因此,它不能用于在Eclipse上编译.但是,您的构建需要在运行时使用它,在这种情况下使用-Pruntime运行.

虽然将POM和构建调整到IDE的问题可能并不理想,但实现目标可能是一个很好的折衷方案.

点赞