我有一个导入Eclipse Oxygen的maven项目。 Eclipse报告没有编译问题(Alt + F5
)。当我从命令行运行maven时,我得到了
[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
该软件包确实存在于我的.ava / 15.0.jar中的.m2 / repository中。我也可以在Eclipse mvn依赖项中看到它。当我检查项目的mvn dependency:tree
时,我看到了
[INFO] | | | +- com.google.guava:guava:jar:15.0:runtime
它是命令行上的运行时传递依赖项,它解释了为什么它不能在命令行上编译。不知何故,Eclipse已经转变了从运行时到编译的传递依赖。
有谁知道为什么会这样,以及我如何使Eclispe m2e尊重传递依赖的范围?
答案 0 :(得分:1)
目前,see top rated reply here why和JDT都不支持每个项目支持不同范围所需的多个类路径。
请参阅:m2e
答案 1 :(得分:1)
重点是:如果在源代码中导入外部类,则必须将它们设置为编译依赖项,并且永远不要相信它们可能已经的事实是传递依赖(因为,因为它们是传递性的,你没有直接控制它们,因此在未来的版本中它们也可能会消失)。
这是怎么回事:
com.google.guava:guava:jar:15.0
设置为依赖项。guava-15.0.jar
,项目编译正常。简而言之:您应该将guava-15.0
(以及您的代码需要的任何其他工件)包含在直接依赖(带有编译范围)中pom文件。