web-dev-qa-db-ja.com

ダウンロードしたjarファイルをカスタムディレクトリに配置するようにIvyに指示するにはどうすればよいですか?

私はIvyのまったくの初心者であり、 GuavaGson などの一般的に使用されるライブラリをフェッチするために非常に簡単に試してみました 利用可能 中央のMavenリポジトリ内:

<ivy-module version="2.0">
    <info organisation="com.company" module="foobar"/>    
    <dependencies>
        <dependency org="com.google.guava" name="guava" rev="10.0.1"/>
        <dependency org="com.google.code.gson" name="gson" rev="2.0"/>
    </dependencies>    
</ivy-module>

Windowsでは、デフォルトで、Ivyはファイルを%USERPROFILE%\.ivy2\cache\に保存します。 Unix-yシステムでは、それらは$HOME/.ivy2/の下にダウンロードされます。

これはかなり基本的な質問だと思います:Ivyにバイナリとソースの両方をダウンロードし、バイナリjarを1つの(任意の)ディレクトリに配置し、ソースjarを別のディレクトリに配置する方法

たとえば、ダウンロードしたすべてのバイナリjarを[project_home]/WebContent/WEB-INF/libに配置するようにIvyに指示します。

IDEプラグインではなく、次の行に沿って、Ant経由でIvyを使用していることに注意してください。

<project xmlns:ivy="antlib:org.Apache.ivy.ant" name="ivy" default="resolve" > 
    <target name="resolve" description="retrieve dependencies with ivy">
        <ivy:retrieve/>
    </target>

    <path id="ivy.lib.path">
        <fileset dir="tools/buildlibs" includes="*.jar"/>
    </path>
    <taskdef resource="org/Apache/ivy/ant/antlib.xml" uri="antlib:org.Apache.ivy.ant" classpathref="ivy.lib.path"/>        
</project>
18
Jonik

別の SO回答 は、依存関係のグループを分離するために構成を使用する方法を説明しています。ただし、この問題では、さまざまなツタの構成に合わせるために、依存関係を複数回宣言する必要がある場合があります。

次のことを試してください。

ivy.xml

<ivy-module version="2.0">
    <info organisation="com.company" module="foobar"/>    
    <configurations>
        <conf name="sources"  description="Source jars"/>
        <conf name="binaries" description="binary jars"/>
    </configurations>
    <dependencies>
        <dependency org="com.google.guava" name="guava" rev="10.0.1" conf="sources->sources"/>
        <dependency org="com.google.code.gson" name="gson" rev="2.0" conf="sources->sources"/>

        <dependency org="com.google.guava" name="guava" rev="10.0.1" conf="binaries->default"/>
        <dependency org="com.google.code.gson" name="gson" rev="2.0" conf="binaries->default"/>
    </dependencies>    
</ivy-module>

build.xml

<project xmlns:ivy="antlib:org.Apache.ivy.ant" name="hello-ivy" default="resolve">

    <target name="resolve" description="retrieve dependencies with ivy">
        <ivy:retrieve conf="sources" pattern="lib/[conf]/[artifact](-[classifier]).[ext]"/>
        <ivy:retrieve conf="binaries" pattern="lib/[conf]/[artifact](-[classifier]).[ext]"/>
    </target>

    <target name="clean" description="Remove build directories">
        <delete dir="lib"/>
    </target>

    <target name="clean-all" depends="clean" description="clean ivy cache">
        <ivy:cleancache />
    </target>

</project>

注:ツタのキャッシュを削除するターゲットを追加するように更新されました。

アーティファクトが新たにダウンロードされるように、ビルドは次のように実行されます。

$ ant clean-all resolve

結果

$ find . -type f
./build.xml
./ivy.xml
./lib/sources/gson-sources.jar
./lib/sources/guava-sources.jar
./lib/binaries/gson.jar
./lib/binaries/jsr305.jar
./lib/binaries/guava.jar

ソースアーティファクトにJavaファイルが含まれていることの証明:

$ unzip -t ./lib/sources/gson-sources.jar
Archive:  ./lib/sources/gson-sources.jar
    testing: META-INF/                OK
    testing: META-INF/MANIFEST.MF     OK
    testing: com/                     OK
    testing: com/google/              OK
    testing: com/google/gson/         OK
    testing: com/google/gson/annotations/   OK
    testing: com/google/gson/internal/   OK
    testing: com/google/gson/internal/bind/   OK
    testing: com/google/gson/reflect/   OK
    testing: com/google/gson/stream/   OK
    testing: com/google/gson/annotations/Expose.Java   OK
    testing: com/google/gson/annotations/package-info.Java   OK
    testing: com/google/gson/annotations/SerializedName.Java   OK
    testing: com/google/gson/annotations/Since.Java   OK
    testing: com/google/gson/annotations/Until.Java   OK
    testing: com/google/gson/AnonymousAndLocalClassExclusionStrategy.Java   OK
    testing: com/google/gson/Cache.Java   OK
    testing: com/google/gson/CamelCaseSeparatorNamingPolicy.Java   OK
    testing: com/google/gson/CompositionFieldNamingPolicy.Java   OK
    testing: com/google/gson/DefaultTypeAdapters.Java   OK
    testing: com/google/gson/DisjunctionExclusionStrategy.Java   OK
    testing: com/google/gson/ExclusionStrategy.Java   OK
    testing: com/google/gson/ExposeAnnotationDeserializationExclusionStrategy.Java   OK
    testing: com/google/gson/ExposeAnnotationSerializationExclusionStrategy.Java   OK
    testing: com/google/gson/FieldAttributes.Java   OK
    testing: com/google/gson/FieldNamingPolicy.Java   OK
    testing: com/google/gson/FieldNamingStrategy.Java   OK
    testing: com/google/gson/FieldNamingStrategy2.Java   OK
    testing: com/google/gson/FieldNamingStrategy2Adapter.Java   OK
    testing: com/google/gson/Gson.Java   OK
    testing: com/google/gson/GsonBuilder.Java   OK
    testing: com/google/gson/GsonToMiniGsonTypeAdapterFactory.Java   OK
    testing: com/google/gson/InnerClassExclusionStrategy.Java   OK
    testing: com/google/gson/InstanceCreator.Java   OK
    testing: com/google/gson/internal/$Gson$Preconditions.Java   OK
    testing: com/google/gson/internal/$Gson$Types.Java   OK
    testing: com/google/gson/internal/bind/ArrayTypeAdapter.Java   OK
    testing: com/google/gson/internal/bind/BigDecimalTypeAdapter.Java   OK
    testing: com/google/gson/internal/bind/BigIntegerTypeAdapter.Java   OK
    testing: com/google/gson/internal/bind/CollectionTypeAdapterFactory.Java   OK
    testing: com/google/gson/internal/bind/DateTypeAdapter.Java   OK
    testing: com/google/gson/internal/bind/ExcludedTypeAdapterFactory.Java   OK
    testing: com/google/gson/internal/bind/JsonElementReader.Java   OK
    testing: com/google/gson/internal/bind/JsonElementWriter.Java   OK
    testing: com/google/gson/internal/bind/MapTypeAdapterFactory.Java   OK
    testing: com/google/gson/internal/bind/MiniGson.Java   OK
    testing: com/google/gson/internal/bind/ObjectTypeAdapter.Java   OK
    testing: com/google/gson/internal/bind/Reflection.Java   OK
    testing: com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.Java   OK
    testing: com/google/gson/internal/bind/SqlDateTypeAdapter.Java   OK
    testing: com/google/gson/internal/bind/StringToValueMapTypeAdapterFactory.Java   OK
    testing: com/google/gson/internal/bind/TimeTypeAdapter.Java   OK
    testing: com/google/gson/internal/bind/TypeAdapter.Java   OK
    testing: com/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper.Java   OK
    testing: com/google/gson/internal/bind/TypeAdapters.Java   OK
    testing: com/google/gson/internal/ConstructorConstructor.Java   OK
    testing: com/google/gson/internal/LazilyParsedNumber.Java   OK
    testing: com/google/gson/internal/ObjectConstructor.Java   OK
    testing: com/google/gson/internal/package-info.Java   OK
    testing: com/google/gson/internal/Pair.Java   OK
    testing: com/google/gson/internal/ParameterizedTypeHandlerMap.Java   OK
    testing: com/google/gson/internal/Primitives.Java   OK
    testing: com/google/gson/internal/Streams.Java   OK
    testing: com/google/gson/internal/UnsafeAllocator.Java   OK
    testing: com/google/gson/JavaFieldNamingPolicy.Java   OK
    testing: com/google/gson/JsonArray.Java   OK
    testing: com/google/gson/JsonDeserializationContext.Java   OK
    testing: com/google/gson/JsonDeserializer.Java   OK
    testing: com/google/gson/JsonDeserializerExceptionWrapper.Java   OK
    testing: com/google/gson/JsonElement.Java   OK
    testing: com/google/gson/JsonElementVisitor.Java   OK
    testing: com/google/gson/JsonIOException.Java   OK
    testing: com/google/gson/JsonNull.Java   OK
    testing: com/google/gson/JsonObject.Java   OK
    testing: com/google/gson/JsonParseException.Java   OK
    testing: com/google/gson/JsonParser.Java   OK
    testing: com/google/gson/JsonPrimitive.Java   OK
    testing: com/google/gson/JsonSerializationContext.Java   OK
    testing: com/google/gson/JsonSerializer.Java   OK
    testing: com/google/gson/JsonStreamParser.Java   OK
    testing: com/google/gson/JsonSyntaxException.Java   OK
    testing: com/google/gson/LongSerializationPolicy.Java   OK
    testing: com/google/gson/LowerCamelCaseSeparatorNamingPolicy.Java   OK
    testing: com/google/gson/LowerCaseNamingPolicy.Java   OK
    testing: com/google/gson/LruCache.Java   OK
    testing: com/google/gson/ModifierBasedExclusionStrategy.Java   OK
    testing: com/google/gson/ModifyFirstLetterNamingPolicy.Java   OK
    testing: com/google/gson/package-info.Java   OK
    testing: com/google/gson/RecursiveFieldNamingPolicy.Java   OK
    testing: com/google/gson/reflect/package-info.Java   OK
    testing: com/google/gson/reflect/TypeToken.Java   OK
    testing: com/google/gson/SerializedNameAnnotationInterceptingNamingPolicy.Java   OK
    testing: com/google/gson/stream/JsonReader.Java   OK
    testing: com/google/gson/stream/JsonScope.Java   OK
    testing: com/google/gson/stream/JsonToken.Java   OK
    testing: com/google/gson/stream/JsonWriter.Java   OK
    testing: com/google/gson/stream/MalformedJsonException.Java   OK
    testing: com/google/gson/stream/StringPool.Java   OK
    testing: com/google/gson/SyntheticFieldExclusionStrategy.Java   OK
    testing: com/google/gson/UpperCamelCaseSeparatorNamingPolicy.Java   OK
    testing: com/google/gson/UpperCaseNamingPolicy.Java   OK
    testing: com/google/gson/VersionConstants.Java   OK
    testing: com/google/gson/VersionExclusionStrategy.Java   OK
No errors detected in compressed data of ./lib/sources/gson-sources.jar.
17
Mark O'Connor

〜/ .ivy2は ivy cache です。

パターンを ivy retrieve に設定する必要があります。これにより、依存関係がダウンロードされる場所が定義されます。

<ivy:retrieve pattern="${project_home}/WebContent/WEB-INF/lib/[artifact].[ext]" conf="jars"/>

そして多分ソースのための2番目の検索:

<ivy:retrieve pattern="${project_home}/sources/[artifact].[ext]" conf="sources"/>

これも機能し、ソースとjarの依存関係を異なるディレクトリに配置します。

<ivy:retrieve pattern="${project_home}/[conf]/[artifact].[ext]" conf="sources, jars"/>

これは、リポジトリでソース/ jarがどのように指定されているかによって異なります。

そして補足:taskdefはタスクを使用する前に来なければなりません。

そして、リゾルバーをm2compatibleとして定義する必要があります。

<ibiblio name="maven2" m2compatible="true"/>
8
oers

私も同様の問題を抱えていましたが、提供されたソリューションが機能しなかったもう少しトリッキーな状況でした。構成を定義していないメインのivy.xmlファイルがあったので、気付かないうちに作成されるデフォルトの構成を継承しました( doc を参照)。新しく作成された「メイン」confをすべての依存関係に適用すると、ビルドが壊れました。 ivy_extra.xmlなどの別のファイルで新しいモジュールを定義し、それを新しいターゲットにロードする以外に選択肢はありませんでした。

サンプルファイル:

<!-- ivy_extra.xml -->
<ivy-module version="2.0">
    <info organisation="com.myorg" module="mymodule"/>
    <configurations>
        <conf name="download" visibility="private" />
    </configurations>
    <dependencies>
        <dependency org="com.google.guava" name="guava" rev="10.0.1" conf="download->default"/>
    </dependencies>
</ivy-module>

次のようにbuild.xmlにロードされます:

<target name="download-guava" description="Retrieve guava">
    <echo>Retrieving guava</echo>
    <ivy:resolve file="ivy_agent.xml"/>
    <ivy:retrieve conf="download" type="jar" pattern="guava/[artifact]-[revision].jar"/>
</target>
1
Jean