有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

共 (2) 个答案

  1. # 1 楼答案

    我从特性请求链接中了解到,您有一些src/main/resources/config.xml和一个依赖项,该依赖项还包含一个config.xml,您希望在测试中使用它。是这样吗

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

    这样,您的测试将看到依赖项中的config.xml,而不是您的src/config/config.xml,因为它不在类路径中

  2. # 2 楼答案

    <>考虑单独项目中的测试。通常,当您有一个与Maven方式冲突的项目时,这就是解决方案——将其拆分