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

Tho*_*sen 13 java eclipse m2eclipse maven m2e

我有一种情况,我需要一个包含Java源的文件夹,用作树结构中"彼此相邻"的几个maven项目的源文件夹.由于maven项目的依赖性差异,我不能创建包含源的编译版本的工件,但是除了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/....
Run Code Online (Sandbox Code Playgroud)

并让它在Eclipse中工作?

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

Ser*_*riu 10

你不应该这样做.

如果要在不同的模块中使用该代码,那么它也应该是Maven模块,用作其他模块的依赖项.

你要做的主要问题是,即使它不是两个模块之间的实际的源复制/粘贴,但最终它的行为就像一个.一旦你建造了两个罐子会发生什么?你将有重复的类,所以如果你在同一个应用程序中使用它们,类路径将有点错误.

那么,你究竟想要完成的是什么?

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

如果你真的,真的必须将它作为共享源目录而不是共享依赖项,那么你可以看看这个答案.


noa*_*hlz 1

您应该能够使用相对路径和Maven Build Helper作为解决方案。

在每个项目中,或者在它们都继承自的“父”pom.xml 中,添加以下内容:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
      <execution>
        <id>add-source</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>add-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>${basedir}/../../common/src</source>
          </sources>
        </configuration>
      </execution>
    </executions>
  </plugin>
Run Code Online (Sandbox Code Playgroud)