4

tychoを使用してEclipseプラグインを構築しようとしています。

私のパッケージcom.mycompany.mathには、p2-repositoryにインストールされているorg.apache.commons.math-1.2.0が必要です。依存関係は、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バージョンをダウンロードしました。だから、私の質問は、私が1.2.0を使用するMANIFEST.MFで定義したときに、なぜmaven/tychoダウンロードの2.1.0なのかということです。

親のpom.xmlで、3つのp2リポジトリを定義したことがわかります。最後のものには、必要な1.2.0バージョンが含まれています。

私の親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.mathpom.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>

4

1 に答える 1

10

問題は、Require-Bundleステートメントが一般的すぎることです。実際には、バージョン1.2.0以降Require-Bundle: org.apache.commons.math;bundle-version="1.2.0"のバージョンの数学バンドルが必要であることを指定します。

1.2.0または互換性のあるバージョンのみが必要であることを指定する必要があります。これはで行うことができますRequire-Bundle: org.apache.commons.math;bundle-version="[1.2.0,2.0.0)"。このステートメントは、実行時にバンドルが(明らかに互換性のない)2.1バージョンの数学バンドルに対して配線されることを防ぎ(これも重要です!)、おそらくビルドの問題も修正します。

Tychoは、ビルド用の数学バンドルのより高い1.xバージョンに対して解決する場合があります(そのようなバージョンがターゲットプラットフォームに存在する場合(つまり、構成されたp2リポジトリのいずれかまたはPOM依存関係の中にある場合)。これが当てはまるが、ビルドで1.2バージョンが使用されるようにしたい場合は、ターゲットプラットフォームのコンテンツを制御する必要があります。(Maven<dependencyManagement>は、構成したp2リポジトリーに影響を与えないため、十分ではありません。)これを行うには、Tychoのターゲットプラットフォーム構成でフィルターを指定します。

<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>
于 2012-11-08T14:21:57.680 に答える