java更改类路径上要由surefireplugin加载的位置的顺序
有人知道如何改变它吗
我是说从
target/test-classes ... target/classes .... maven dependencies
到
target/test-classes ... maven dependencies .... target/classes
它与这个surefire插件feature request相关
这是因为surefire插件不能包含/排除/target/classes中的资源。。。它只能通过<testResources>
元素包含/排除资源,该元素只能影响/target/test类,而不能影响/target/classes
这一切都发生在Surefire插件中:
File projectClassesDirectory = new File( project.getBuild().getOutputDirectory() );
if ( !projectClassesDirectory.equals( classesDirectory ) )
{
int indexToReplace = classpathElements.indexOf( project.getBuild().getOutputDirectory() );
if ( indexToReplace != -1 )
{
classpathElements.remove( indexToReplace );
classpathElements.add( indexToReplace, classesDirectory.getAbsolutePath() );
}
else
{
classpathElements.add( 1, classesDirectory.getAbsolutePath() );
}
}
File projectTestClassesDirectory = new File( project.getBuild().getTestOutputDirectory() );
if ( !projectTestClassesDirectory.equals( testClassesDirectory ) )
{
int indexToReplace = classpathElements.indexOf( project.getBuild().getTestOutputDirectory() );
if ( indexToReplace != -1 )
{
classpathElements.remove( indexToReplace );
classpathElements.add( indexToReplace, testClassesDirectory.getAbsolutePath() );
}
else
{
classpathElements.add( 0, testClassesDirectory.getAbsolutePath() );
}
}
getLog().debug( "Test Classpath :" );
for ( Iterator i = classpathElements.iterator(); i.hasNext(); )
{
String classpathElement = (String) i.next();
getLog().debug( " " + classpathElement );
surefireBooter.addClassPathUrl( classpathElement );
}
# 1 楼答案
我从特性请求链接中了解到,您有一些
src/main/resources/config.xml
和一个依赖项,该依赖项还包含一个config.xml
,您希望在测试中使用它。是这样吗如果是这种情况,您可以做的是将
src/main/resources/config.xml
移动到另一个地方(而不是资源目录),比如src/config/config.xml
,然后通过设置war或jar插件配置将其包含在最终的JAR/WAR中这样,您的测试将看到依赖项中的
config.xml
,而不是您的src/config/config.xml
,因为它不在类路径中# 2 楼答案