通过surefire-plugin更改要加载的类路径上的位置顺序

时间:2011-01-04 11:15:29

标签: java maven-3 surefire

有人知道如何改变吗?

我的意思是

target/test-classes ... target/classes .... maven dependencies

target/test-classes ... maven dependencies .... target/classes 

它涉及此surefire-plugin feature request

这是因为surefire-plugin不能包含/排除/ target / classes中的资源...它只能通过<testResources>元素包含/排除资源,这只会影响/ target / test-classes,而不是/ target /类

这一切都发生在Surefire-plugin:

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 );
}

2 个答案:

答案 0 :(得分:1)

考虑在单独的项目中进行测试。一般来说,当你有一个与The Maven Way冲突的项目时,这就是解决方案 - 将其拆分。

答案 1 :(得分:0)

我从您的功能请求链接中了解到,您有一些src/main/resources/config.xml和一个依赖项,其中还包含您要在测试中使用的config.xml。是吗?

如果是这种情况,您可以做的是将src/main/resources/config.xml移动到另一个地方(不是资源目录),例如src/config/config.xml,并通过设置将它包含在最终的JAR / WAR中warjar插件配置。

通过这种方式,您的测试会看到来自您的依赖项的config.xml,而不是src/config/config.xml,因为它不在类路径中。