Tycho没有使用来自eclipse-target-definition项目的目标文件而没有pom中的版本

时间:2015-02-19 13:05:23

标签: eclipse maven tycho target-platform

我遇到了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-File:

<?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>

我在这里没有版本,因为我在网页上找到了一个页面,它告诉我们,eclipse-target-packaging的pom中的某个版本不起作用,实际上,指定的版本没有解析用于所有其他maven模块的父pom中的以下配置:

<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文件中表示为存储库标记,则构建也可以。

有人知道我的配置有什么问题吗?

2 个答案:

答案 0 :(得分:0)

同样的问题在tycho用户邮件列表上提出并回答:

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

答案 1 :(得分:0)

当您配置缺少groupIdartifactIdversion的目标平台配置工件时,Tycho会默默忽略此配置。这个is a bug in Tycho - 它应该失败并显示一条明确的错误消息。

因此,您需要使用版本引用eclipse-target-definition模块。如果您的项目设置在每个模块中使用相同的版本,则可以使用${project.version}进行此操作(以避免在使用tycho-versions-plugincurrently doesn't update the target-platform-configuration进行手动操作。如果从父POM继承target-platform-configuration的某些项目使用不同的版本,则需要使用显式版本指定目标文件。 (背景:POM中的变量在继承后被扩展,因此${project.version}扩展为子项目的版本,而不是包含配置的父POM的版本。)