m2e:包含 java _sources_ 的文件夹需要由多个 m2e 项目使用

2022-09-04 20:24:32

我有一个情况,我需要有一个包含Java源代码的文件夹,用作树结构中几个“彼此相邻”的maven项目的源文件夹。由于 maven projets 的依赖关系差异,我无法创建包含源代码编译版本的工件,但需要让每个项目除了 src/main/java 之外将其视为源文件夹。

显然,Maven可以通过添加位于“...”中的另一个源文件夹来轻松完成此操作。/foo/src“,但是 m2e 拒绝这样做,为了让它对我们好用,我需要让它在 Eclipse 中工作。

我如何拥有这样的结构:

/common/src
/a/pom.xml  (add source folder ../common/src)
/a/src/main/java/...
/b/pom.xml  (add source folder ../common/src)
/b/src/main/java/....

并让它在Eclipse中工作?

(注:我知道 http://dev.eclipse.org/mhonarc/lists/m2e-users/msg01988.html - 但是,它是从2011年开始的)


答案 1

不应该那样做。

如果要在不同的模块中使用该代码,则它也应该是一个 Maven 模块,由其他模块用作依赖项。

您尝试执行的操作的主要问题是,即使它不是两个模块之间源的实际复制/粘贴,但最终它的行为也像一个模块。构建两个罐子后会发生什么?您将有重复的类,因此,如果在同一应用程序中使用它们,则类路径会有点错误。

那么,您到底想完成什么呢?

  • 在两个不同的模块中重用一些代码?然后将其用作依赖罐。
  • 在两个不同的模块中重用代码,但你不想最终得到多个jar?然后,您可以使用 maven-shade-plugin 将依赖项嵌入到最终工件中。
  • 构建同一库的两个略有不同的版本?然后,您可以再次使用maven-shade-插件来扩展一个具有其他源的jar。或者,您可以使用 aspectj-maven-plugin 将方面注入到一组基本类中。
  • 有一个会触发循环依赖关系的代码设计,因为模块依赖于公共代码,而公共代码又依赖于每个模块的代码?正确的解决方法是从模块中提取通用API,该API将进入共享依赖项,并且每个模块将以不同的方式实现。

如果你真的,真的必须把它保留为一个共享的源目录,而不是一个共享的依赖关系,那么你可以看看这个答案


答案 2

文件系统的一个小技巧怎么样?只需制作指向文件夹的符号链接,您可能就可以:)

对于NTFS,您可以尝试从命令行执行。更多解释在这里: http://en.wikipedia.org/wiki/NTFS_symbolic_linkmklink


推荐