Изменение порядка местоположений в classpath для загрузки с помощью surefire-plugin - PullRequest
11 голосов
/ 04 января 2011

Кто-нибудь знает, как это изменить?

Я имею в виду от

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

до

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

Это относится к этому верному плагину Запрос функции

Это потому, что плагин surefire не может включать / исключать ресурсы из / target / classes ... он может включать / исключать ресурсы только через элемент <testResources>, который может влиять только на / target / test-classes, но не / 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 голос
/ 29 июня 2011

Рассмотрим тестирование в отдельном проекте.В общем, когда у вас есть проект, который конфликтует с The Maven Way, это решение - разделите его.

0 голосов
/ 06 декабря 2011

Из вашей ссылки на запрос функции я понял, что у вас есть src/main/resources/config.xml и зависимость, которая также содержит config.xml, которую вы хотите использовать в своих тестах. Это верно?

Если это так, то вы можете переместить ваш src/main/resources/config.xml в другое место (не каталог ресурсов), например src/config/config.xml, и они включат его в ваш окончательный JAR / WAR, установив war или jar плагин config.

Таким образом, ваши тесты будут видеть config.xml из вашей зависимости, но не из src/config/config.xml, поскольку он не находится в пути к классам.

...