我使用的是Eclipse3.51、Maven 2.0.9、Java1.4和WTP2.0(而不是m2Eclipse)的Maven Eclipse插件2.7。
我有一个扁平化的多模块项目,设置如下(父级pom的模块父级,模块A和B依赖C)。
第一次导入这四个模块将显示出预期的编译错误,因为我还没有运行eclipse插件。在本地存储库为空的情况下,运行EclipseClear将解决本地工作区中的所有编译错误和依赖关系。
如果我要对模块B进行一些小的代码更改并再次运行eclipse插件,编译错误将出现在模块A和B中。编译错误涉及无法找到的类。它的类似模块C不再在类路径中供A和B查看。
我查看了.classpath文件,并明确地查看了Eclipse工作区中的正确模块。
如果我删除maven存储库并再次执行eclipse清理,那么有关未解析类的编译错误是固定的。另外,如果我使用useProjectReferences标志运行eclish洁净命令为false,然后用true重新运行它,Eclipse将重新构建我的工作区,错误就会消失。
发生什么事了?
发布于 2009-12-28 21:02:54
第一次导入四个模块将显示编译错误,因为我还没有运行eclipse插件。在本地存储库为空的情况下,运行EclipseClear将解决本地工作区中的所有编译错误和依赖关系。
到目前一切尚好。只有一个问题: Eclipse不是指eclipse:clean
,而是指eclipse下的干净,对吗?
如果我要对模块B做一些小的代码更改并再次运行
插件,编译错误将出现在模块A和B中。编译错误涉及无法找到的类。它的类似模块C不再在类路径中供A和B查看。
我不知道为什么在对模块B进行轻微代码更改后运行maven eclipse插件,但是,假设您必须运行,例如,因为您添加了一个依赖项(提到您运行的目标会很有帮助,但没关系)。当在多项目构建中使用maven eclipse插件时,它将默认在Eclipse级别使用项目引用(即A和B依赖于编译的C类,而不是C JAR)。而且,由于Maven和Eclipse共享同一个target/classes
文件夹,所以在Maven级别上的干净或编译可能会混淆Eclipse。它不再看到已编译的类,也不会自己编译它们(因为Eclipse中没有发生更改)。在这种情况下,Eclipse清理或重建(即在Eclipse级别)应该可以解决问题。
--我查看了.classpath文件,并明确地查看了.classpath工作区中的正确模块。
是的,这不是问题。问题的根源在于Eclipse和Maven共享编译类的相同文件夹。
如果我删除maven存储库并再次执行eclipse,那么有关未解析类的编译错误是固定的。
您真的不必这样做,如果您使用项目引用,我也不知道maven存储库与此有什么关系。在Eclipse下执行清理和/或重新构建所有项目应该可以解决这个问题。
另外,如果我使用
标志运行useProjectReferences标志为false,然后用true重新运行它,那么Eclipse将重新构建我的工作区,错误就会消失。
您是否使用项目引用?再次,下一次,也许提供您的插件配置在您的问题,这可能会有所帮助。无论如何,您不应该在构建之间接触到这个。决定是否要使用项目引用(我认为它更方便,没有它们,您将需要mvn install
C来对A和B进行更改)并坚持这种配置。在mvn
构建之后,重新构建Eclipse工作区就足够了。
PS:请注意,您可以将maven eclipse插件配置为使用自定义buildOutputDirectory
,例如target/eclipse-classes
,但这还有其他缺点(我没有这么做)。
https://stackoverflow.com/questions/1970238
复制相似问题