我刚刚开始在我的项目中使用Maven。我的所有生产代码当然都在 main 目录中。当我将单元测试添加到测试目录时,有没有办法将main
目录与我的tests
目录同步?
例如,假设我添加了一个新包org.bio.mynewpackage
。我必须进入我的主文件夹并添加相同的包名...这很烦人。
有什么想法吗?
答案 0 :(得分:1)
这是嵌入GMaven plugin执行中的Groovy脚本。它完全符合您的要求。
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>mirror-folder-structure</id>
<phase>generate-test-sources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
<![CDATA[
static void createShadow(File base, File shadow){
if(base.exists()&&!shadow.exists())shadow.mkdirs();
base.eachDir { createShadow(it, new File(shadow, it.name))};
}
createShadow(pom.build.sourceDirectory,pom.build.testSourceDirectory);
]]>
</source>
</configuration>
</execution>
</executions>
</plugin>
问题是:它不会自动运行。我已将其绑定到阶段generate-test-sources
,但您可以选择任何其他阶段。但是,您必须手动执行该阶段,例如mvn generate-test-sources
。
如果您考虑将Eclipse与m2eclipse插件一起使用,m2eclipse允许您定义在保存文件时自动运行的生命周期阶段,这样会更容易。
答案 1 :(得分:0)
我不知道我的问题是否正确:通常,按照惯例,maven将检测main / java中的所有类文件以及test / java中的所有类文件。您不必声明包名称。
因此,如果您将一个新类包添加到“main”,它们将被编译和打包,如果您向“test”添加一些新测试,则将在测试阶段自动发现并执行。
答案 2 :(得分:0)
通常,我会在创建测试时依赖IDE来执行此操作。
例如:
org.bio.mynewpackage.MyNewClass
中创建了一个新课程main/
。 org.bio.mynewpackage.MyNewClassTest
时,IDE应该自动创建必要的目录树。答案 3 :(得分:0)
我不知道您是否正在寻找具体的问题,如何maven可以帮助您做到这一点。我仍然总是使用rsync来匹配目标文件夹。
以下内容: rsync -Crit ./source ./target
添加'n'以在测试模式下运行,它将输出将改变而不是实际执行的内容。总是这样做,因为如果没有正确的话,rsync可能会完全弄乱。
您还可以在每个目录的文件中添加模式匹配规则,也可以在命令行中添加一次。
答案 4 :(得分:0)
我不知道有任何插件可以做到这一点,但写一个插件应该很容易。甚至可以使用gmaven-plugin等一些简单的Groovy脚本来完成。
或者,此shell命令应该执行您想要的操作:
# ! -wholename '*/.*' excludes hidden dirs like .svn
$( cd src/main/java/ && find -type d ! -wholename '*/.*' -exec mkdir -p ../../test/java/{} \; )
编辑:
这是一个simple Maven plugin(这个插件按名称对eclipse .classpath文件的条目进行排序),可以让你快速入手Maven插件开发。