Java Maven/eclipse,eclipse如何尊重Maven运行时范围?

Java Maven/eclipse,eclipse如何尊重Maven运行时范围?,java,eclipse,slf4j,logback,Java,Eclipse,Slf4j,Logback,在pom.xml中,我包括了logback和SLF4J,如下所示,使用maven build可以很好地工作。如果我直接从logback导入,它将给出编译错误 <dependencyManagement> <dependencies> <!-- We want to have slf4j with scope compile --> <dependency>

在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>

org.slf4j
slf4j api
1.7.6
回写
回归经典
1.1.2
运行时

但是我如何才能使eclipse尊重logback依赖的运行时范围并防止从那里提出导入建议呢?

不幸的是,在eclipse上使用正常的构建似乎是不可能的,正如@A4L所提到的,这是一个已知的bug,请检查并确认。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>

运行时
回写
回归经典
1.1.2
运行时
因此,它不能用于在Eclipse上编译。但是,构建需要在运行时使用它,在本例中使用
-Pruntime


尽管根据IDE的问题调整POM和构建可能并不理想,但这可能是实现目标的一个很好的折衷办法。

对于单元测试,您始终可以添加
测试。至于主要的方法,我不太明白你的问题-你能详细说明一下吗?对不起,我问错了,我现在会尝试澄清。我想这更像是一个maven/eclipse集成问题。恐怕这是不可能的,eclipse在实现maven的运行时范围时遇到了一些问题,请看,这太糟糕了。感谢您的回答我实际上回答了一个重复的问题,这可能不是这里的最佳做法,我应该将较新的问题标记为重复的问题,并且只在这里回答我的猜测,但是由于这个问题没有任何投票或答案,我无法将较新的问题标记为重复的问题。该错误已在版本4.9(又名“2018-09”)中修复)添加允许在Eclipse中编译和构建jar的运行时范围