3

antを使用して依存関係を構築し、ivyを使用するプロジェクトがあります。Ivyで構成された依存関係に基づいて、クラスパスを使用してプロジェクトの開始スクリプトを生成したいと思います。特に、依存関係の順序が重要であり、ivy構成の順序から保持する必要があるためです。

誰かがこれを以前にやったことがありますか?また、クラスパスに相対パスを生成する必要があるため、絶対パスは使用できません。これは、ビルドが実行されるマシンでのみ機能するためです。

編集:フィードバックに基づいて、Ivyを方程式から切り離すと(選択したディレクトリに解決します)、ライブラリのリストを解決できる可能性があります。しかし、特に相対パス(binディレクトリに対して)を使用して、開始スクリプトに適したクラスパスをどのように生成しますか?

例えば

install
    /bin <-- scripts here
    /lib <-- jars here

したがって、私の場合、完全な絶対パスではなく、すべてのjar参照の前bin/start.shに置く必要があります。../lib/

ありがとう。

4

4 に答える 4

1

長年 (2000 年?) 以来、パス ("make_cp") にこの小さなスクリプトがありました。

#!/usr/bin/perl

my $CLASSPATH="";
my $DIR=shift;
$DIR||="lib";

opendir(LIBDIR, $DIR);
while ($file = readdir(LIBDIR)) {
    $CLASSPATH.=":$DIR/$file" if ($file =~ /\.jar$|\.zip$/);
}
closedir(LIBDIR);
$CLASSPATH=~ s/^://g;
print "$CLASSPATH";

次のように使用します。

export CLASSPATH=`make_cp lib`:`make_cp external-lib`
于 2009-11-12T14:04:25.483 に答える
0

Ivyは重複する依存関係を排除し、すべてのプロジェクトに最適な共通の依存関係を見つけようとするため、依存関係の順序がどのように重要になるかはまったくわかりません。

ただし、プロジェクト用にAntを使用して標準のJAR / WAR / otherを作成し、そのJAR内にIvy依存関係を含める必要があります。基本的に必要なのは、IvyのAntタスクを作成してフォルダーへの依存関係を解決し、それらの依存関係を使用してクラスを構築し、JARを作成して、ライブラリJARを新しく作成したJARの/lib/フォルダーに含めることです。 。

于 2009-11-09T16:07:19.783 に答える
0

Esko が言ったように、必要なすべての JAR アーカイブを含む JAR を作成する必要があります。

<zip destfile="abc.jar">
    <zipgroupfileset dir="lib/distributed" includes="*.jar"/>
    <manifest>
        <attribute name="Main-Class" value="com.acme.MyClass"/>
    </manifest>
</zip>

その後、開始スクリプトは次のようになります。

java -jar abc.jar
于 2009-11-10T20:16:41.700 に答える
0

Java 1.6 を使用している場合は、ファイル グロブを使用できます (つまり、java -cp "../lib/*")。以前のバージョンの Java を使用していて、Vladimir のソリューションを使用したくない場合は、クラスパスを特定するスクリプトを作成する必要があります。

したがって、launch.sh は次のようになります。

cd dirname %0 # change to the bin directory, use %0/.. instead and you can replace ../lib with just /lib
sh set_classpath.sh  # set the classpath
java -cp $CLASSPATH some.package.Main 

set_classpath.sh には、CLASSPATH を「../lib/abc.jar:../lib/def.jar」のようなものに設定する Linux マジックが含まれます。

export CLASSPATH=`ls *.jar | sed 's/[^.jar].jar/..\/lib\/\0:/'`
于 2009-11-12T02:26:28.800 に答える