在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的问题可能并不理想,但实现目标可能是一个很好的折衷方案.