Преобразователь Maven из pom.xml, термоусадочная пленка

В тестах, когда я задаю полный путь к pom.xml, все работает нормально:

{code}
File[] files = Maven.resolver().loadPomFromFile("/full/system/path/pom.xml").importDependencies(ScopeType.TEST, ScopeType.PROVIDED).resolve().withTransitivity().asFile();
{code}

Во многих примерах используется только pom.xml, поэтому я попробовал:

{code}
File[] files = Maven.resolver().loadPomFromFile("pom.xml").importDependencies(ScopeType.TEST, ScopeType.PROVIDED).resolve().withTransitivity().asFile();
{code}

Но в этом случае я получаю исключение:

Path to the pom.xml file must be defined and accessible

Тот же результат, если я попытаюсь передать ""../pom.xml". Я должен включить все зависимости от pom.xml в военный архив, который развернут во время тестов arquillian, есть ли обходной путь? В идеале я хотел бы повторно использовать pom.xml, который используется для сборки проекта Я не хочу иметь отдельный файл pom.xml в папке «src/test/resources».

EDIT: у меня есть основная идея @baba, но вместо того, чтобы копировать pom.xml, я установил свойство basedir через фильтрацию ресурсов maven:

Я добавил файл tests.properties в test/resources, добавил свойство в файл:

basedir=${basedir}

В pom.xml я использовал [http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html]

<build>
    <testResources>
        <testResource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
        </testResource>
    </testResources>

В тестах я загрузил все зависимости:

ResourceBundle resourceBundle = ResourceBundle.getBundle ("tests");
String baseDir = resourceBundle.getString("basedir");
File[] files = Maven.resolver().loadPomFromFile(baseDir + File.separator + "pom.xml").importDependencies(ScopeType.TEST, ScopeType.PROVIDED).resolve().withTransitivity().asFile();

person Alexandr    schedule 24.08.2015    source источник
comment
Вы работаете в Linux?   -  person AndrewSmiley    schedule 24.08.2015
comment
@AndrewSmiley, да, я.   -  person Alexandr    schedule 25.08.2015
comment
@Александр, так даже лучше.   -  person Nikola Yovchev    schedule 25.08.2015


Ответы (1)


Вы должны сначала осознать одну вещь, а затем две другие вещи. Вот первое:

  1. Как только вы говорите об относительных путях в банке, а не о полных путях, вы говорите (в основном) о файлах путей к классам. Поэтому вам, вероятно, следует взглянуть на LoadPomTask с методом

общедоступный статический LoadPomTask loadPomFromClassLoaderResource (конечная строка pathToPomResource)

Теперь, когда мы поняли, что нет способа избежать пути к классам, мы должны ответить на два других вопроса:

  1. Файл pom.xml включен в путь к классам по умолчанию (ответ: да) (где? по умолчанию-> META-INF/maven/${groupId}/${artifactId}/pom.xml)
  2. Если я использую тестовую среду, такую ​​как surefire, изменяет ли она путь к классам и доступен ли файл pom.xml в том же месте во время выполнения тестов (ответ: да, в основном)

Предлагаемое решение: поскольку META-iNF/MAVEN/${groupId}/${artifactId} может быть изменено, вы не должны иметь ссылку в своем коде, которая загружает материал оттуда. Поэтому я предлагаю вам взглянуть на maven-resources-plugin. . Что позволит вам скопировать файл pom.xml во время компиляции в выбранное вами место (на самом деле я бы рекомендовал вам скопировать его в два места:

/src/main/resources

и

/src/test/resources

На этапах process-resources и process-test-resources соответственно: см. maven-build-lifecycles

Подвести итог:

  1. Вам нужно загрузить pom.xml из пути к классам, если вы хотите использовать местоположение типа (pom.xml), а не полный путь

  2. Вам нужно включить файл pom.xml на этапе компиляции, используя плагин maven-resources-plugin, который должен быть в вашем пути к классам.

person Nikola Yovchev    schedule 24.08.2015