对不起是啰嗦......
我有一些现有的maven项目。我使用 Maven将它们导入Eclipse - >导入现有的Maven项目。
这给了我6个单独的项目和一个项目,列出了它下面的所有6个项目。 (该伞形项目中定义了6个模块,转换为6个eclipse项目 - 据我了解maven是如何工作的)
项目A中的一个需要另外两个项目B和C(在编译时和运行时)。
构建路径 - 在A的构建路径上,我将其中一个库作为Maven依赖项。它构建得很好。
部署程序集 -
但是,在A的部署程序集中,没有用于部署到web-inf/lib
的条目。因此,当tomcat启动时,它找不到任何必需的罐子或项目B和C.
所以我在部署程序集中添加了一个条目:source - maven和依赖项部署 - web-inf / lib。
Tomcat出现了,我的项目A的webapp出现了。
然而这打破了eclipse的构建 - 构建eclipse抱怨: “无效的类路径发布导出项目条目不受支持”
我看到的是,在构建路径下,有一个新的条目被添加到web-inf / lib以在maven-dependencies下发布/导出。删除它也会从部署程序集中删除maven条目。
唯一的解决方法是在部署程序集中指定由maven生成的目标下的web-inf/lib
,但这会导致项目B和C的过时副本被拾取。
为什么我需要这个设置是因为当我在Eclipse中对项目B和C进行更改并在Eclipse中构建它时,我希望在调试项目A时看到更改。我不想运行maven因为耗时而再次建立在B和C上。
非常感谢任何帮助。
我确实尝试包含MAVEN2_CLASSPATH_CONTAINER
但是它总是空的,当tomcat运行时,它找不到必要的库。 (BTW MAVEN2_CLASSPATH_CONTATINER
设置为什么值?)
这是在Eclipse Indigo Mac OSX上。
答案 0 :(得分:37)
您需要将相关项目添加到部署程序集中。
右键单击项目 - >属性 - >部署组件 - >添加
答案 1 :(得分:7)
我解决了这个问题:
右键点击我的eclipse项目 - > Maven - >更新项目配置...
答案 2 :(得分:5)
想出来......但不完全......
所以我在部署程序集中添加了 maven dependency ,如前所述。
Maven dependency -> WEB-INF/lib
另外还添加了项目B 和 C :
B -> WEB-INF/lib and C->WEB-INF/lib
这种方式B和C不会添加到java构建路径中的发布/导出中。我不知道eclipse如何知道不从maven repo导出B和C,而是从项目B和C本身导出它。
无论如何那些其他日子...... 现在我很高兴:)
答案 3 :(得分:1)
对于搜索此内容的任何其他人,您似乎也可以手动将以下内容添加到.classpath文件中
<classpathentry combineaccessrules="false" kind="src" path="/B"/>
答案 4 :(得分:1)
通过包含Maven Dependencies,您将包含项目B和项目C的依赖项。事实证明,您还必须手动包含项目B和C.
有效的确切方法是。 项目A - &gt;属性 - &gt;部署程序集
单击“添加”,然后单击“项目”选择B和C.重建后问题将得到解决。
答案 5 :(得分:0)
我有这个问题,但我相信这些答案都没有正确解决问题。相反,他们解决m2eclipse(应该为您管理类路径和部署程序集)。对我来说,我使用m2eclipse而没有m2eclipse-wtp(一个单独的插件)的问题。
有关插件的详细信息,请参阅this SO answer。
答案 6 :(得分:0)
如果将maven用于部署程序集(项目 - &gt;属性 - &gt;部署程序集),则可以添加相关项目/或maven java构建路径条目
然后检查这些相关项目是否与Facets兼容。 (项目 - &gt;项目构面)
答案 7 :(得分:0)
如果您在类路径中有多个相同jar的条目,则会发生此错误。因此,您需要检查类路径并删除重复的条目。