gpt4 book ai didi

Maven/Tycho 采用错误的捆绑版本

转载 作者:行者123 更新时间:2023-12-01 09:03:03 31 4
gpt4 key购买 nike

我正在尝试使用 tycho 构建我的 eclipse-plugin。

我的包 com.mycompany.math 需要 org.apache.commons.math-1.2.0,它安装在我的 p2-repository 中。
依赖关系在 org.mycompany.math 的 MANIFEST.MF 中定义:

Require-Bundle: org.apache.commons.math;bundle-version="1.2.0",

在我的构建过程中,我收到 org.apache.commons.math-classes 无法解析的错误消息。
在构建开始之前,maven/tycho 下载了 2.1.0 版本。
所以,我的问题是,为什么 maven/tycho 下载的 2.1.0,当我在 MANIFEST.MF 中定义我使用 1.2.0 时。

您可以在我的父 pom.xml 中看到我定义了三个 p2-repository。最后一个,包含我需要的 1.2.0 版本。

我的 parent pom.xml:


<project...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>com.mycompany.build</artifactId>
<version>3.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Build</name>
<description>Parent POM for full builds</description>

<modules>
<!-- my modules -->
</modules>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<tycho-version>0.16.0</tycho-version>
</properties>

<repositories>
<!-- configure p2 repository to resolve against -->
<repository>
<id>juno</id>
<layout>p2</layout>
<url>http://download.eclipse.org/releases/juno/</url>
</repository>
<repository>
<id>orbit</id>
<layout>p2</layout>
<url>http://download.eclipse.org/tools/orbit/downloads/drops/S20121021123453/repository/</url>
</repository>
<repository> <-- CONTAINS ORG.APACHE.COMMONS.MATH-1.2.0 !
<id>comp</id>
<layout>p2</layout>
<url>http:our-adress.com/p2/</url>
</repository>
</repositories>

<build>
<plugins>
<plugin>
<!-- enable tycho build extension -->
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>

<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<pomDependencies>consider</pomDependencies>
<environments>
<environment>
<os>linux</os>
<ws>gtk</ws>
<arch>x86</arch>
</environment>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86</arch>
</environment>
</environments>
</configuration>
</plugin>
</plugins>
</build>


<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</dependencyManagement>

还有我的 com.company.math pom.xml


<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>com.mycompany.math</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>Math</name>
<packaging>eclipse-plugin</packaging>

<parent>
<groupId>com.mycompany</groupId>
<artifactId>com.mycompany.build</artifactId>
<version>3.1.0-SNAPSHOT</version>
<relativePath>../com.mycompany.build</relativePath>
</parent>


<dependencies>
<dependency>
<groupId>commons-math</groupId>
<artifactId>commons-math</artifactId>
<version>1.2</version>
</dependency>
</dependencies>

最佳答案

问题是你的 Require-Bundle说法过于笼统:
Require-Bundle: org.apache.commons.math;bundle-version="1.2.0"您实际上指定您需要 1.2.0 版中的数学包 或任何更高版本 .

您应该指定您只需要 1.2.0 或兼容版本。这可以通过 Require-Bundle: org.apache.commons.math;bundle-version="[1.2.0,2.0.0)" 来完成.此语句可防止您的包在运行时连接到(显然不兼容的)2.1 版本的数学包(这也很重要!),并且它可能还会解决您的构建问题。

如果 target platform 中存在这样的版本,第谷可能仍会针对更高的 1.x 版本的数学包进行解析以进行构建。 (即在您的情况下,任何已配置的 p2 存储库或 POM 依赖项中的任何一个)。如果是这种情况,但您想强制在构建中使用 1.2 版本,则需要控制目标平台的内容。 (Maven <dependencyManagement> 是不够的,因为它对您配置的 p2 存储库没有影响。)您可以通过指定 filters 来做到这一点。在第谷的目标平台配置中:

<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<filters>
<filter>
<type>eclipse-plugin</type>
<id>org.apache.commons.math</id>
<restrictTo>
<version>1.2.0</version>
</restrictTo>
</filter>
</filters>
</configuration>
</plugin>

关于Maven/Tycho 采用错误的捆绑版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288822/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com