2013-07-05 5 views
0

Я использую стандартный Java-класс MavenProject вместе с API com.jcabi.aether.Aether API для определения набора зависимостей jar для предоставления POM. Там нет фильтрации ресурсов встречающийся через API по умолчанию, и я еще предстоит узнать, как позвонить Aether.resolve() для зависимостей, таких какMaven: включение фильтрации ресурсов через java api

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>${my-junit.version}</version> 
    <scope>test</scope> 
</dependency> 

без получения ошибок DependencyResolutionException с «причина: не удалось загрузить» JUnit : junit: jar: $ {my-junit.version} ', потому что у него есть буквальная строка $ {..}'. Вот фрагмент кода:

MavenProject proj = .. 
Dependency dep = proj.getDependencies()... 
Aether aether = new Aether(proj, ..) 
aether.resolve(new DefaultArtifact(... dep.getVersion() ..) 

Как можно с помощью этих API, чтобы включить фильтрацию ресурсов таким образом, чтобы пользователь/встроенное замещение собственности происходит по умолчанию? Или это ручной процесс? Просьба представить образцы кода, если это возможно, приветствия!

+0

Обратите внимание, что это не фильтрация ресурсов, это свойство интерполяции. Я бы сгенерировал полный pom, используя 'mvn help: effective-pom', а затем прочитал ваш код. – noahlz

ответ

0

У нас была аналогичная проблема, и вам нужно было сделать замену свойств вручную. Вы можете вызвать метод getProperties() на вашем MavenProject ссылке.

Что-то по следующим направлениям должно работать:

Properties props = proj.getProperties(); 
String depVersion = stripOutDollarAndCurlyBrackets(dep.getVersion()); 
String realDepVersion = props.getProperty(depVersion); 
dep.setVersion(realDepVersion); 

Вы, очевидно, должны были бы написать метод stripOutDollarAndCurlyBrackets(), но мы надеемся, что это дает вам идею.

Смежные вопросы