我正在运行具有结构的项目,假设运行时模块(或者你称之为插件),就像C风格的.so对象一样。目前它只能通过ClassLoader
工作,而我正在尝试使用maven来测试它。我在项目的测试目录中写了Test.java
和TestModule.java
个文件。但是maven尝试只运行它们Test.java
。如何指定测试文件?
P.S。是否有任何系统用于加载除ClassLoader
之外的模块?而新的外国模块必须是项目取决于我的核心项目?
答案 0 :(得分:4)
Maven - 与任何其他构建系统一样 - 需要区分生产代码和测试代码。建议的变体是使用目录结构分隔两个类:
/src
/main
/java
-- your production classes go here
/test
/java
-- your test classes go here
如果您的项目具有不同的结构,您可以change pom.xml
文件中的默认行为(不推荐):
<build>
<sourceDirectory>${basedir}/src/</sourceDirectory>
<testSourceDirectory>${basedir}/test</testSourceDirectory>
<outputDirectory>${basedir}/bin</outputDirectory>
<testOutputDirectory>${basedir}/test-bin</testOutputDirectory>
...
</build>
如果你将生产和测试代码放在同一目录中(不好,不好),你可以告诉Maven include or exclude类运行测试:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<includes>
<include>Test.java</include>
</includes>
</configuration>
</plugin>
</plugins>
您仍然需要某种命名约定来标识测试类(建议:对于类MyClass
,应该调用相应的测试类MyClassTest
):
<includes>
<include>**/*Test.java</include>
</includes>
答案 1 :(得分:2)
Maven使用maven-surefire-plugin来运行测试。因此它执行test 目标
includes属性定义了哪些类将被视为测试类。默认名称模式为:
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
</includes>
因此,如果您不希望在maven测试阶段执行测试(可能因为您只想手动运行此测试)而不是更改includes
属性或重命名您的类(例如CheckModule而不是TestModule) )。
如果您的TestModule.java
是应用程序代码而不是某种测试代码而不是将其放在测试目录中。看看Maven default directory layout并在某种可能的情况下使用它。