Search code examples
eclipsemavenm2eclipse

Why does Eclipse turn a maven runtime dependency into a compile dependency?


I have a maven project imported into Eclipse Oxygen. Eclipse reports no compile issues (Alt + F5). When I run maven from the command line I get

[ERROR] /home/dean/src/TAP3UIs/TAP3Desktop/src/main/java/com/ms/tap3/controller/RequestAccessController.java:[8,30] package com.google.common.base does not exist

That package does exist in my .m2/repository in guava-15.0.jar. I can also see it in Eclipse mvn dependencies. When I check the mvn dependency:tree for the project I see

[INFO] | | | +- com.google.guava:guava:jar:15.0:runtime

It is a runtime transitive dependency on the command line, which explains why it doesn't compile on the command line. Somehow Eclipse has turned a transitive dependency from runtime to compile.

Does anyone know why this happens and how I make Eclispe m2e respect the scope of the transitive dependencies?


Solution

  • Currently, neither JDT nor m2e support multiple classpaths per project which is required to support different scopes.

    See: Eclipse bug 486035 - Different classpath containers for different scopes

    Update:

    Since Eclipse Photon (4.8) which was released in June 2018 this is now supported. See Eclipse bug 526858 and my video showing this in action.