1

我在解决来自 .target 文件的依赖项的 Maven/Tycho 机制方面存在问题。我遵循了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>

我在这里没有版本,因为我在网上找到了一个页面,它讲述了 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 文件中的存储库标记,但它无法从目标文件解析对工件的依赖关系,构建也可以工作。

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

4

2 回答 2

0

当您配置缺少 、 或 的目标平台配置工件groupIdartifactIdversionTycho 会默默地忽略此配置。这是第谷中的一个错误- 它应该失败并显示一个明确的错误消息。

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

于 2015-02-20T13:49:57.543 回答
-1

在 tycho-user 邮件列表中提出并回答了同样的问题:

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

于 2015-02-20T09:47:09.430 回答