带有java和groovy源文件夹的Maven项目,如何在POM中表示

Cap*_*Man 1 java eclipse groovy maven m2e

我在我的一个 poms 中发现了这个来更改 Groovy 的测试目录。

<build>
    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
    ...
</build>
Run Code Online (Sandbox Code Playgroud)

问题是在src/main/(src/main/javasrc/main/groovy)中有 Java 和 Groovy 类。否则我会为src/test/groovy.

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

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

Ren*_*ato 6

遵循官方Groovy 文档给出的建议。

编辑

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

compilesrc/main/groovy目录和您的 Groovy 文件可能位于的任何其他位置添加一个执行。


旧答案

选择他们的 4 个选项之一来解决这个问题,然后testSourceDirectory从你的 pom.xml 中删除它。

在您的情况下,我将使用最后一个最冗长的选项,因为它保持标准 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>
...
Run Code Online (Sandbox Code Playgroud)

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