Есть ли простой способ добавить jar-файлы на верный путь-тест-плагин? - PullRequest
1 голос
/ 05 ноября 2011

есть это свойство AdditionalClasspathElements, но, к сожалению, оно не обрабатывает каталоги с помощью jar

с этой проблемой действительно трудно справиться ... единственный способ, который приходит мне в голову - это создать mojo, который готовитclasspath, но я не знаю, что последует

создание списка из 175 банок в моем определении pom выглядело бы смешно. Это было бы 525 строк в AdditionalClasspathElements

Мне нужно загрузитьОгромный проект, который не использует Maven.Объявить их было бы практически невозможно из-за совместимости версий 175 библиотек.Imho загружать их напрямую из classpath проекта - единственный способ

Ответы [ 2 ]

3 голосов
/ 06 ноября 2011

Во-первых, используйте подстановочные знаки для создания classpath:

<additionalClasspathElements>
    <additionalClasspathElement>
        /path/to/lib/*.jar
    </additionalClasspathElement>
</additionalClasspathElements>

Вы должны использовать эти свойства:

<useManifestOnlyJar>false</useManifestOnlyJar>  
<useSystemClassLoader>false</useSystemClassLoader>

Потому что взгляните на ForkConfiguration.java:

if ( useManifestOnlyJar )
{
    File jarFile;
    try
    {
        jarFile = createJar( classPath );
    }
    catch ( IOException e )
    {
        throw new SurefireBooterForkException( "Error creating archive file", e );
    }

    cli.createArg().setValue( "-jar" );

    cli.createArg().setValue( jarFile.getAbsolutePath() );
}
else
{
    cli.addEnvironment( "CLASSPATH", StringUtils.join( classPath.iterator(), File.pathSeparator ) );

    final String forkedBooter = ForkedBooter.class.getName();

    cli.createArg().setValue( shadefire ? new Relocator().relocate( forkedBooter ) : forkedBooter );
}

Вы хотите, чтобы classpath соединялся и добавлялся к CLI, а не к JAR-файлу только для манифеста ...

Это должно работать для простых зависимостей. Но если вы хотите загрузить что-то большое, то, что использует classloader, я бы порекомендовал, что делает bmargulies. Потому что ты бы боролся с этим тяжело imho :-) Смотри здесь, почему .

Для вдохновения Я написал установщик зависимостей , который устанавливает jar-файлы в локальный репозиторий maven и генерирует определение pom со всеми этими зависимостями, чтобы вы могли использовать себя как зависимость (которая помещает все его зависимости в classpath - переходные зависимости) ... лучший способ пойти имхо. Это довольно общий Mojo, его не обязательно использовать на Liferay. Надо просто немного поиграть с этим.

1 голос
/ 06 ноября 2011

Напишите сценарий оболочки, который выполняет итерацию по всем этим jar-файлам, вызывая mvn install: install-file с сфабрикованным groupId, artifactId и версией.

Заставьте сценарий оболочки записывать XML для элементов Maven <dependency/>для всех них: <scope>test</scope>.

Вставьте получившийся блоб XML в POM.

Отойдите назад.

...