Maven - 使用“tests”文件夹同步“main”文件夹

时间:2010-11-29 08:53:09

标签: java unit-testing junit maven

我刚刚开始在我的项目中使用Maven。我的所有生产代码当然都在 main 目录中。当我将单元测试添加到测试目录时,有没有办法将main目录与我的tests目录同步?

例如,假设我添加了一个新包org.bio.mynewpackage。我必须进入我的文件夹并添加相同的包名...这很烦人。

有什么想法吗?

5 个答案:

答案 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

  1. 其中C忽略版本控制 文件/文件夹,例如.svn
  2. r是递归我是信息输出。
  3. t是时间戳。我总是这样说 确保文件的差异 基于时间戳。
  4. 添加'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插件开发。