【问题标题】:Maven project with java and groovy source folders, how to denote in POM带有 java 和 groovy 源文件夹的 Maven 项目,如何在 POM 中表示
【发布时间】:2015-08-14 15:54:23
【问题描述】:

我在我的一个 pom 中发现了这个,用于更改 Groovy 的测试目录。

<build>
    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
    ...
</build>

问题在于src/main/(分别为src/main/javasrc/main/groovy)中同时存在Java 和Groovy 类。否则我会为 src/test/groovy 做同样的事情。

在包含src/main/groovy 的同时包含src/main/java 的正确方法是什么,这样当我使用m2e 导入它时,我不需要手动将src/main/groovy 添加为源文件夹?

我问是因为即使我在 pom 和 Eclipse 的构建路径中的其他项目中有依赖项,除非我手动将 jar 添加为外部依赖项,否则 Eclipse 无法从该项目中找到一个类。

【问题讨论】:

  • 您使用的是groovy-eclipse-plugin吗?如果是这样,你可以把 Groovy 和 Java 文件扔在同一个目录下,不需要区分。
  • 我不是 100% 确定我是否是,但我不想重组这个(以及其他所有)项目。不过感谢您的建议。
  • 您应该使用 groovy-eclipse-plugin,这是推荐的方式。文档清楚地解释了如何处理这个问题。

标签: java eclipse maven groovy m2e


【解决方案1】:

听从官方Groovy documentation给出的建议。

编辑

官方建议在 2015 年的某个时候发生了变化:他们现在建议使用 Ant Run 插件

将以下内容添加到您的 pom(在插件部分)并从您的 pom 中删除 testSourceDirectory

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <configuration>
                <tasks>
                    <mkdir dir="${basedir}/src/test/groovy"/>
                    <taskdef name="groovyc"
                             classname="org.codehaus.groovy.ant.Groovyc">
                        <classpath refid="maven.test.classpath"/>
                    </taskdef>
                    <mkdir dir="${project.build.testOutputDirectory}"/>
                    <groovyc destdir="${project.build.testOutputDirectory}"
                             srcdir="${basedir}/src/test/groovy/" listfiles="true">
                        <classpath refid="maven.test.classpath"/>
                    </groovyc>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

src/main/groovy 目录和您的Groovy 文件可能所在的任何其他位置添加compile 执行。


老答案

选择 one of their 4 options 来解决这个问题,然后从你的 pom 中删除这个 testSourceDirectory

在你的情况下,我会使用最后一个,最详细的选项,因为它保持标准 Maven 生命周期完整,并使其真正明确发生了什么......

所以,删除之前的配置后,将其添加到 pom 中:

<build>
...
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.5</version>
  <executions>
    <execution>
      <id>add-source</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>add-source</goal>
      </goals>
      <configuration>
        <sources>
          <source>src/main/groovy</source>
        </sources>
      </configuration>
    </execution>
    <execution>
      <id>add-test-source</id>
      <phase>generate-test-sources</phase>
      <goals>
        <goal>add-test-source</goal>
      </goals>
      <configuration>
        <sources>
          <source>src/test/groovy</source>
        </sources>
      </configuration>
    </execution>
  </executions>
</plugin>
...

请注意,即使您甚至可以在 src/main/javasrc/main/groovy(以及测试文件夹)中混合 groovy 和 java 文件,事情也会变得非常混乱,我强烈建议您不要使用 Java/ Groovy 混了一阵子代码。

【讨论】:

  • 关键是添加测试源,而不是替换它们。这是正确的答案。如果您有 groovy 测试资源,请考虑将它们(maven buildhelper addResources)添加为 src/test/groovyResources
  • @Edwin 是的,我同意。我没有制作这个 pom,这就是为什么我将问题恶化为“找到”而不是“写”。
  • @CaptainMan 你可能忘记接受答案了 :)
  • groovy doco 的链接断开
  • @wytten 看起来建议已经改变了......他们建议使用 Ant 插件(我同意这是一个更好的选择)。所以链接没了。要遵循此答案中给出的建议,链接现在在这里:github.com/groovy/groovy-eclipse/wiki/…
猜你喜欢
  • 2021-12-09
  • 2017-05-23
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
相关资源
最近更新 更多