Java Maven-同步“;“主要”;文件夹中包含“文件”;测试“;文件夹
我刚开始在我的项目中使用Maven。当然,我所有的产品代码都在主目录中。当我将单元测试添加到我的tests目录时,是否有方法将Java Maven-同步“;“主要”;文件夹中包含“文件”;测试“;文件夹,java,unit-testing,junit,maven,Java,Unit Testing,Junit,Maven,我刚开始在我的项目中使用Maven。当然,我所有的产品代码都在主目录中。当我将单元测试添加到我的tests目录时,是否有方法将maindir与我的testsdir同步 例如,假设我添加了一个新包org.bio.mynewpackage。我必须进入我的主文件夹并添加相同的包名。。。这很烦人 有什么想法吗?我不知道你的问题是否正确:通常,按照惯例,maven会检测main/java中的所有类文件和test/java中的所有类文件。您不必声明包名 因此,如果您向“main”添加一个新的包和类,它们将被
main
dir与我的tests
dir同步
例如,假设我添加了一个新包org.bio.mynewpackage
。我必须进入我的主文件夹并添加相同的包名。。。这很烦人
有什么想法吗?我不知道你的问题是否正确:通常,按照惯例,maven会检测main/java中的所有类文件和test/java中的所有类文件。您不必声明包名
因此,如果您向“main”添加一个新的包和类,它们将被编译和打包,如果您向“test”添加一些新的测试,它们将在测试阶段被自动发现并执行。通常我在创建测试时会依赖IDE来完成这项工作 例如:
- 我在
中创建了一个新类main/
李>org.bio.mynewpackage.MyNewClass
- 现在,当我创建一个test
时,IDE应该自动创建必要的目录树org.bio.mynewpackage.MyNewClassTest
您还可以在每个目录的文件中或在命令行中添加一次模式匹配规则。我不知道有哪个插件可以做到这一点,但编写一个应该很容易。甚至可以使用gmaven插件或类似的工具通过一些简单的Groovy脚本来完成 或者,此shell命令应该执行您想要的操作:
# ! -wholename '*/.*' excludes hidden dirs like .svn
$( cd src/main/java/ && find -type d ! -wholename '*/.*' -exec mkdir -p ../../test/java/{} \; )
编辑:
这里有一个插件(该插件按名称对eclipse.classpath文件的条目进行排序),可以让您快速开始Maven插件的开发 下面是嵌入到执行中的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>
org.codehaus.gmaven
gmaven插件
1.3
镜像文件夹结构
生成测试源
执行
问题是:它不会自动运行。我已经将它绑定到阶段生成测试源
,但是您可以选择任何其他阶段。但是,您必须手动执行该阶段,例如,mvn生成测试源
如果您考虑使用M2Eclipse插件使用Eclipse,M2Eclipse允许您定义保存文件时自动运行的生命周期阶段,这样就更容易了。然而,在“main”中保持与在“test”中相同的目录结构听起来是合乎逻辑的。我只是想知道Maven是不是自动这么做的。因此,例如,如果主目录中有
org.bio.something.MyApp
,您可能希望测试目录中的org.bio.something.MyAppTest
。@Luca-但这不是maven的工作。Maven用于构建应用程序(编译、测试、打包、部署),而不是创建源文件夹或组织代码。您使用的是什么IDE?这听起来像是它能为你做的事情。(Maven不在乎;它的工作特别是生成target
目录的内容,以便您可以专注于源代码…)好的。我还不是IDE的忠实粉丝,我以为Maven有这样的想法。Maven有很多目的,但用IDE替代不是其中之一。@S.P.Floyd-当然不是,我从来没有说过。但是考虑到Maven将目录结构作为其主要功能,我认为应该内置类似的功能。@Luca我相信您可以编写一个插件来复制test/和main/中的目录结构,但这有什么意义呢?此外,您的测试是否总是必须与源代码具有相同的包结构?@这里是狼群-具有相同的包结构只是一种额外的标准实践,似乎是合乎逻辑的。如果其他人正在查看我的代码,他们就知道在哪里可以找到特定包类的测试。我认为他只是在寻找一种同步目录的方法,而不是文件的方法。rsync也可以这样做。鉴于我没有广泛使用maven,我可能几乎偏离了主题。