Tycho не использует целевой файл из проекта eclipse-target-definition без версии в pom

У меня проблема с механизмом Maven/Tycho для разрешения зависимостей из файла .target. Я следил за информацией на https://wiki.eclipse.org/Tycho/Target_Platform#Target_files, но не получить ожидаемых результатов. Вот некоторые факты:

Целевой файл:

<target name="Eclipse Kepler Target" sequenceNumber="1424335573">
<locations>
    <location includeMode="slicer" includeAllPlatforms="false" includeSource="false" includeConfigurePhase="false" type="InstallableUnit">
        <unit id="org.eclipse.sdk.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.equinox.executable.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.equinox.p2.sdk.feature.group"  version="0.0.0"/>
        <unit id="org.eclipse.emf.sdk.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.emf.transaction.sdk.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.emf.validation.sdk.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.emf.workspace.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.emf.workspace.source.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.emf.eef.sdk-feature.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.draw2d.sdk.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.gef.sdk.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.gmf.runtime.sdk.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.gmf.runtime.notation.sdk.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.acceleo.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.acceleo.source.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.ocl.feature.group" version="0.0.0"/>
        <unit id="org.eclipse.ocl.source.feature.group" version="0.0.0"/>
        <repository id="kepler" location="http://korvm016.apac.bosch.com/updatesites/thirdparty/eclipse_4.3_kepler/"/>
    </location>
    <location includeMode="slicer" includeAllPlatforms="false" includeSource="false" includeConfigurePhase="false" type="InstallableUnit">
        <unit id="com.google.inject" version="0.0.0"/>
        <unit id="com.google.inject.source" version="0.0.0"/>
        <unit id="com.google.inject.assistedinject.source" version="0.0.0"/>
        <unit id="com.google.inject.assistedinject" version="0.0.0"/>
        <unit id="com.google.inject.multibindings.source" version="0.0.0"/>
        <unit id="com.google.inject.multibindings" version="0.0.0"/>
        <unit id="com.google.guava" version="0.0.0"/>
        <unit id="com.google.guava.source" version="0.0.0"/>
        <unit id="javax.activation" version="0.0.0"/>
        <unit id="javax.activation.source" version="0.0.0"/>
        <unit id="org.aopalliance" version="0.0.0"/>
        <unit id="org.apache.commons.cli" version="0.0.0"/>
        <unit id="org.apache.commons.cli.source" version="0.0.0"/>
        <unit id="org.apache.commons.collections" version="0.0.0"/>
        <unit id="org.apache.commons.collections.source" version="0.0.0"/>
        <unit id="org.apache.commons.exec" version="0.0.0"/>
        <unit id="org.apache.commons.exec.source" version="0.0.0"/>
        <unit id="org.apache.commons.httpclient" version="0.0.0"/>
        <unit id="org.apache.commons.httpclient.source" version="0.0.0"/>
        <unit id="org.apache.commons.io" version="0.0.0"/>
        <unit id="org.apache.commons.io.source" version="0.0.0"/>
        <unit id="org.apache.commons.lang" version="0.0.0"/>
        <unit id="org.apache.commons.lang.source" version="0.0.0"/>
        <unit id="org.junit" version="0.0.0"/>
        <unit id="org.junit.source" version="0.0.0"/>
        <unit id="org.hamcrest.core.source" version="0.0.0"/>
        <unit id="org.hamcrest.core" version="0.0.0"/>
        <unit id="org.hamcrest.generator.source" version="0.0.0"/>
        <unit id="org.hamcrest.generator" version="0.0.0"/>
        <unit id="org.hamcrest.integration.source" version="0.0.0"/>
        <unit id="org.hamcrest.integration" version="0.0.0"/>
        <unit id="org.hamcrest.library.source" version="0.0.0"/>
        <unit id="org.hamcrest.library" version="0.0.0"/>
        <unit id="org.hamcrest.text.source" version="0.0.0"/>
        <unit id="org.hamcrest.text" version="0.0.0"/>
        <unit id="org.hamcrest" version="0.0.0"/>
        <unit id="org.mockito" version="0.0.0"/>
        <unit id="org.mockito.source" version="0.0.0"/>
        <unit id="org.objenesis" version="0.0.0"/>
        <unit id="org.objenesis.source" version="0.0.0"/>
        <unit id="ch.qos.logback.classic" version="0.0.0"/>
        <unit id="ch.qos.logback.classic.source" version="0.0.0"/>
        <unit id="ch.qos.logback.core" version="0.0.0"/>
        <unit id="ch.qos.logback.core.source" version="0.0.0"/>
        <unit id="ch.qos.logback.slf4j" version="0.0.0"/>
        <unit id="ch.qos.logback.slf4j.source" version="0.0.0"/>
        <unit id="org.slf4j.api" version="0.0.0"/>
        <unit id="org.slf4j.api.source" version="0.0.0"/>
        <repository id="orbit" location="http://korvm016.apac.bosch.com/updatesites/thirdparty/orbit-buildrepo-R20140525021250/"/>
     </location>
</locations>
</target>

pom-файл для целевого модуля:

<?xml version="1.0" encoding="UTF-8"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.etas.congra.releng</groupId>
    <artifactId>com.etas.congra.releng.targetplatform</artifactId>
    <packaging>eclipse-target-definition</packaging>
</project>

У меня нет версии здесь, потому что я нашел страницу в Интернете, на которой рассказывалось, что версия в pom для eclipse-target-packaging не работает, и на самом деле указание версии привело к не разрешению следующего конфигурация в родительском pom, используемом для всех других модулей maven:

<plugins>
<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>target-platform-configuration</artifactId>
    <version>${tycho-version}</version>
    <configuration>
        <target>
            <artifact>
                <groupId>com.etas.congra.releng</groupId>
                <artifactId>com.etas.congra.releng.targetplatform</artifactId>
                <relativePath>../../releng/com.etas.congra.releng.targetplatform/pom.xml</relativePath>
            </artifact>
        </target>
    </configuration>
</plugin>
</plugins>

При этом я получаю следующее сообщение об ошибке во время сборки maven:

[INFO] Scanning for projects...
[INFO] Computing target platform for MavenProject: com.etas.congra.releng:com.etas.congra.log:0.1.0-SNAPSHOT @ D:\ConGra_IDE_Luna_win64\git\congra\plugins\com.etas.congra.log\pom.xml
[INFO] Resolving dependencies of MavenProject: com.etas.congra.releng:com.etas.congra.log:0.1.0-SNAPSHOT @ D:\ConGra_IDE_Luna_win64\git\congra\plugins\com.etas.congra.log\pom.xml
[INFO] Cannot complete the request.  Generating details.
[INFO] Cannot complete the request.  Generating details.
[INFO] {osgi.ws=win32, osgi.os=win32, osgi.arch=x86_64, org.eclipse.update.install.features=true}
[ERROR] Cannot resolve project dependencies:
[ERROR]   Software being installed: com.etas.congra.log 0.1.0.qualifier
[ERROR]   Missing requirement: com.etas.congra.log 0.1.0.qualifier requires 'bundle ch.qos.logback.classic 1.0.7' but it could not be found
[ERROR]

Он не может разрешать зависимости от артефактов из целевого файла, хотя цель работает правильно в рабочей области Eclipse, и если все репозитории, упомянутые в целевых файлах, выражены как теги репозитория в файле pom, сборка также работает.

Кто-нибудь знает, что не так в моей конфигурации?


person Lars    schedule 19.02.2015    source источник


Ответы (2)


Когда вы настраиваете артефакт конфигурации целевой платформы, в котором отсутствует groupId, artifactId или version, Tycho молча игнорирует эту конфигурацию. Это является ошибкой в ​​Tycho — она должна завершаться с четким сообщением об ошибке. вместо.

Поэтому вам нужно сослаться на модуль eclipse-target-definition с версией. Если у вас есть настройка проекта, которая использует одну и ту же версию в каждом модуле, вы можете использовать для этого ${project.version} (чтобы избежать ручной работы при использовании tycho-versions-plugin, который в настоящее время не обновляет конфигурацию целевой платформы). Если некоторые из проектов, которые наследуют конфигурацию целевой платформы от вашего родительского POM, используют другую версию, вам необходимо указать целевой файл с явной версией. (Фон: переменные в POM расширяются после наследования, поэтому ${project.version} расширяется до версии дочернего проекта, а не до версии родительского POM, содержащего конфигурацию.)

person oberlies    schedule 20.02.2015

тот же вопрос задавали и отвечали в списке рассылки tycho-user:

https://dev.eclipse.org/mhonarc/lists/tycho-user/msg06323.html

person jsievers    schedule 20.02.2015
comment
Пожалуйста, не предоставляйте ответы только по ссылке, но также копируйте суть ответа из связанного источника в ответ. - person oberlies; 20.02.2015