簡體   English   中英

常春藤,螞蟻和啟動腳本

[英]Ivy, ant and start scripts

我有一個項目使用ant構建和依賴的常春藤。 我想基於Ivy中配置的依賴項,使用類路徑為我的項目生成啟動腳本,特別是因為依賴項的順序可能很重要,需要從常春藤配置中的順序中保留。

有沒有人這樣做過? 我還需要在類路徑中生成相對路徑,因此我不能使用絕對路徑,因為這只適用於構建完成的機器。

編輯:根據反饋,如果我們切斷常春藤的方程式(解析到我選擇的目錄)我可能然后可以解析庫的列表確定。 但是,如何生成適合啟動腳本的類路徑,尤其是相對路徑(相對於我的bin目錄)?

例如

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

所以在我的bin/start.sh我需要在每個jar引用前面都有../lib/而不是完整的絕對路徑。

謝謝。

多年(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`

由於Ivy驅逐了重疊的依賴關系,並試圖找到所有項目的最佳公共依賴關系,我並不真正理解依賴關系的順序如何重要。

但是,您應該為項目創建一個標准的JAR / WAR /其他Ant,並在該JAR中包含Ivy依賴項。 基本上你需要做的就是讓Ivy的Ant任務解決文件夾的依賴關系,然后使用這些依賴關系構建類,然后構造JAR,以便將庫JAR:s包含到新創建的JAR的/ lib /文件夾中。

像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

如果你使用的是java 1.6,你可以使用文件globs(即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將有一些Linux魔法,將CLASSPATH設置為“../lib/abc.jar:../lib/def.jar”之類的東西

export CLASSPATH=`ls *.jar | sed 's/[^.jar].jar/..\/lib\/\0:/'`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM