6

私は自分の問題の解決策を見つけようと何年も探し回っていますが、私が遭遇した他のすべての投稿は機能しないか、私の状況と一致しないため、誰かが私に洞察を与えてくれることを願っています.

私は ant でビルドしたライブラリを持っています。これは 2 つの jar ファイルを出力します。1 つは通常のライブラリのコンパイル済みバージョンを含み、もう 1 つはソース ファイルのみを含みます。

このライブラリは、パッケージングが jar に設定された状態で Nexus リポジトリにアップロードされます。実際の jar ファイルでは、拡張子を jar に設定し、分類子を空白のままにします。ソース jar については、分類子をソースに、拡張子を jar に設定しました。

ivy.xml ファイルで何をしても、ソース jar をダウンロードできません。他の場所で読んだ投稿に基づいて、追加しようとしました:

conf="*->default,sources"

私の依存関係に、しかし、私はエラーが発生します:

configuration not found in org#name;version: 'sources'

つまり、これは基本的に私のライブラリがソースをどこかの構成として定義することを期待していますか? リポジトリ内のソースに分類子が設定された別のアーティファクトがあるという事実を拾うだけだと思いました。

ライブラリをNexusに公開した方法、またはIvyファイルで依存関係宣言を設定した方法のいずれかで、私が間違っている可能性があることについて、誰か他の提案をしてもらえますか?

これは、Nexus に置いたライブラリへの依存関係を定義する基本的な Ivy.xml ファイルです。

<ivy-module version="2.0">

    <info organisation="${ivy.organisation}" module="moduleName" />

    <configurations>
        <conf name="pda" description="moduleName for PDA"/>
        <conf name="server" description="moduleName for server"/>
    </configurations>

    <dependencies>
        <!-- Internal -->
        <dependency name="utility" org="${ivy.organisation}" rev="latest.integration" conf="${ivy.configuration}"/>
        <dependency name="myLib" org="my.org" rev="0.0.+"/>
    </dependencies>

</ivy-module>

以下のコメントに応えて、Ant の build.properties 内で ivy.configuration プロパティが pda に設定されています。Eclipse の場合、プロパティ ファイルを作成し、ivy.configuration を pda に設定しました (このプロパティ ファイルは、Eclipse 内の Ivy 設定で参照されます)。

私が得るエラーメッセージは次のとおりです。

Some projects fail to be resolved
    Impossible to resolve dependencies of ${ivy.organisation}#moduleName;working@host
        unresolved dependency: my.org#myLib;0.0.+: configuration not found in my.org#myLib;0.0.0: 'sources'. It was required from ${ivy.organisation}#moduleName;working@host pda

更新 これが解決されたivy.xmlファイルです:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0">
    <info organisation="my.org"
        module="myLib"
        revision="0.0.0"
        status="release"
        publication="20120419131909"
        default="true"
    />
    <configurations>
        <conf name="default" visibility="public"/>
    </configurations>
    <publications>
        <artifact name="myLib" type="jar" ext="jar" conf="default"/>
    </publications>
</ivy-module>

これは明らかに、「ソース」conf が見つからない理由を説明しています。しかし、ソースを Nexus に追加したので、ソース conf を自動的に追加する必要があるという印象を受けました。

4

3 に答える 3

2

アーティファクトを公開するときは、構成についてIvyに伝える必要があります。例えば:

<ivy-module version="2.0">
    <info organisation="apache" module="commons-lang" revision="2.5" status="release"/>
    <configurations>
        <conf name="binary" description="provide only binary files"/>
        <conf name="development" extends="binary" description="provide binary files with javadoc and sources"/>
    </configurations>
    <publications>
        <artifact name="commons-lang" ext="jar" conf="binary" type="jar"/>
        <artifact name="commons-lang-javadoc" ext="jar" conf="development" type="javadoc"/>
        <artifact name="commons-lang-sources" ext="jar" conf="development" type="source"/>
    </publications>
</ivy-module>

ご覧のとおり、commons-lang.jarはバイナリ構成で公開されています。ただし、commons-lang-sourcesとcommons-lang-javadocは開発構成で公開されています。

依存関係を取得するときは、次のivy.xmlを使用する必要があります。

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info organisation="bitrete" module="strongpoint" status="development"/>
    <configurations>
        <conf name="binary" description="provide only binary files"/>
        <conf name="development" extends="binary" description="provide binary files with javadoc and sources"/>
    </configurations>
    <publications>
        <artifact name="strongpoint" ext="jar" type="jar"/>
    </publications>
    <dependencies>
        <dependency org="apache" name="commons-lang" rev="2.5"/>
    </dependencies>
</ivy-module>

Antで解決するときに必要な構成を提供します。

<property name="ivy.conf" value="binary"/>
...
<property name="ivy.conf" value="development"/>
...
<ivy:resolve conf="${ivy.conf}"/>
于 2012-04-18T15:11:29.063 に答える
2

それで、たくさん遊んだ後、私はついにこれに対する解決策を見つけたようです。次の方法で依存関係を宣言すると:

<dependency name="myLib" org="my.org" rev="0.0.+">
    <artifact type="jar"/>
    <artifact type="source" m:classifier="sources" conf="pdaDev->sources"/>
</dependency>

次に、依存関係のソース構成にリンクする新しい構成 (上記の pdaDev など) を追加できます。Eclipse を使用する場合、pdaDev 構成を使用するように指示でき、ソース jar も (存在する場合) 取り込みます。

上記のように明示的に要求されない限り、Nexus が解決済みの Ivy ファイルにソース構成を含めないように見えるのは奇妙に思えます。

于 2012-04-23T09:56:35.973 に答える
0

ivy ファイルに 2 つの構成を作成します。1 つはクラスパスにあるバイナリ用で、もう 1 つはソース jar 用です。

次に、依存関係に 2 つの構成マッピングを作成します。

<ivy-module version="2.0">
    <info organisation="org.demo" module="demo"/>
    <configurations>
        <conf name="compile" description="jars used for compilation classpath"/>
        <conf name="sources" description="Source jars"/>
    </configurations>
    <dependencies>
        <dependency org="org.slf4j" name="slf4j-simple" rev="1.6.4" conf="compile->default;sources->sources"/>
    </dependencies>
</ivy-module>

ノート:

ANT ビルド内では、次のように構成を使用できます。

<target name="init">
    <ivy:resolve/>

    <!-- Populate a compile classpath for use with javac task -->
    <ivy:cachepath pathid="compile.path" conf="compile"/>

    <!-- Put source jars in the src directory -->
    <ivy:retrieve pattern="src/[artifact]-[revision](-[classifier]).[ext]" conf="sources"/>

</target>
于 2012-04-18T00:45:07.887 に答える