具有 java 和 groovy 源文件夹的 Maven 项目,如何在 POM 中表示
Maven project with java and groovy source folders, how to denote in POM
我在我的一个 poms 中找到了这个来更改 Groovy 的测试目录。
<build>
<testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
...
</build>
问题是 Java 和 Groovy class 都存在于 src/main/
中(分别是 src/main/java
和 src/main/groovy
)。否则我会为 src/test/groovy
.
做同样的事情
在包含 src/main/groovy
的同时还包含 src/main/java
的正确方法是什么,这样当我使用 m2e 导入它时,我不需要手动添加 src/main/groovy
作为源文件夹?
我问是因为即使我在 pom 和 Eclipse 的构建路径中有其他项目的依赖项,Eclipse 也无法从该项目中找到 class,除非我手动将 jar 添加为外部依赖项.
按照官方给出的建议Groovy documentation。
编辑
官方推荐在 2015 年的某个时候发生了变化:他们现在推荐使用 Ant 运行 插件
将以下内容添加到您的 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/java
和 src/main/groovy
(以及测试文件夹)中混合使用 groovy 和 java 文件,事情也会变得真的很混乱,我强烈建议不要使用 Java/Groovy 混合代码一段时间。
我在我的一个 poms 中找到了这个来更改 Groovy 的测试目录。
<build>
<testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
...
</build>
问题是 Java 和 Groovy class 都存在于 src/main/
中(分别是 src/main/java
和 src/main/groovy
)。否则我会为 src/test/groovy
.
在包含 src/main/groovy
的同时还包含 src/main/java
的正确方法是什么,这样当我使用 m2e 导入它时,我不需要手动添加 src/main/groovy
作为源文件夹?
我问是因为即使我在 pom 和 Eclipse 的构建路径中有其他项目的依赖项,Eclipse 也无法从该项目中找到 class,除非我手动将 jar 添加为外部依赖项.
按照官方给出的建议Groovy documentation。
编辑
官方推荐在 2015 年的某个时候发生了变化:他们现在推荐使用 Ant 运行 插件
将以下内容添加到您的 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/java
和 src/main/groovy
(以及测试文件夹)中混合使用 groovy 和 java 文件,事情也会变得真的很混乱,我强烈建议不要使用 Java/Groovy 混合代码一段时间。