我有一个导入eclipse的maven web项目。我有另一个maven项目(生成一个jar文件),web项目依赖于该项目。
从命令行执行时,这两个项目都能正常工作。 mvn包创建一个war文件,它从web项目的maven存储库中提取它依赖的jar。 mvn包在为库运行时创建一个有效的jar文件。
当我将库导入Eclipse时,m2e认识到Web项目依赖于库并更新项目的各个部分,以利用两个maven项目都托管在单个Eclipse工作区中的事实。 Web项目的“Java Build Path”首选项的“Libraries”选项卡的“Maven Dependencies”部分删除库jar文件并将其替换为库项目。随着库在Eclipse中更新,Web项目可以识别这些更改,而无需安装/部署库。
当我尝试在Eclipse中运行Web应用程序时,会出现问题。因为Eclipse实际上是针对Eclipse中的库版本构建Web项目,所以它不会从maven存储库中部署库文件,而是创建一个新的jar文件,它是Eclipse中当前版本库的快照。所有这一切对我来说一般都很好,但是在我正在研究的项目中,Eclipse正在创建的jar文件存在问题。它不是为库插入类文件,而是将其作为我的Maven项目的“src”目录并将其压缩为jar文件。 jar文件的内容类似于:
-main
-java
-com
-... *.java
-resources
-...
-test
-java
-com
-... *.java
我希望它看起来更像:
-com
-... *.class
由于我以前成功使用过这种类型的项目,我想弄清楚是否需要配置一些东西,或者我是否遇到了一个bug。
我在Eclipse Indigo上使用m2e(1.0.200.20111228-1245)的最新更新(Build id:20120216-1857)。
答案 0 :(得分:3)
在Eclipse中,我们可以禁用“工作区解析”,以便它将直接从本地maven存储库使用我们的依赖项,如下所示: -
我们可能需要按以下步骤更新项目配置和其他相关依赖项: -
请注意,因为我们不再直接从工作区使用相关的依赖项,它将直接从我们的本地maven存储库使用。然后,应使用以下命令行将所有相关工件安装到我们的本地maven存储库。
mvn install
无论如何,可以通过使用Eclipse中的上下文菜单来完成以下步骤: -
答案 1 :(得分:3)
这是我提出的解决方案。
在我的案例中,似乎仍然遵循图书馆项目的“部署大会”的规则。
要更改它,请转到库属性 - >部署程序集
在我的情况下,只包含来自'/ src'的映射 - > '/'。我删除了该条目并将其替换为来自'/ target / classes'的映射 - > '/'和'/ src / main / resources' - > '/'。
一旦我有了映射,当部署jar文件时,它就包含我在部署程序集中配置的内容。这样就可以继续使用Eclipse,而无需为每次更改明确重新发布库。但是,当库更新时,似乎没有为我自动重新部署到tomcat - 我仍然需要手动重启tomcat以反映库更改。
我仍然不完全清楚这个项目正在发生什么。我确实有以前的项目具有类似的结构,并且在那些项目中,部署程序集尚未更新为显式包含类文件,但仍然部署了正确的jar文件。