2009-11-09 192 views
3

我有一個項目,使用螞蟻建立和常春藤的依賴項。我想根據在Ivy中配置的依賴關係爲我的項目生成啓動腳本,特別是依賴關係的順序可能很重要,需要根據ivy配置中的順序保留。常春藤,螞蟻和啓動腳本

有沒有人做過這個?我也需要在類路徑中生成相對路徑,所以我不能使用絕對路徑,因爲這隻適用於構建完成的機器。

編輯:根據反饋,如果我們將Ivy剪掉(對我選擇的目錄執行解析),然後我可以解析libs列表。但是,我將如何生成適合啓動腳本的類路徑,特別是相對路徑(相對於我的bin目錄)?

例如

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

所以在我bin/start.sh,我需要有../lib/在每個罐子的參考,而不是一個完整的絕對路徑的前面。

謝謝。

回答

0

由於常春藤驅逐重疊的依賴關係,並試圖找到所有項目的最佳通用依賴項,所以我不太瞭解依賴項的順序如何關係。

但是,您應該爲您的項目製作一個標準的JAR/WAR/other,並在該JAR中包含Ivy依賴關係。基本上所有你需要做的就是讓Ivy的Ant任務解決對文件夾的依賴關係,然後使用這些依賴關係構建類,然後構建JAR,以便將庫JAR:s包含到新創建的JAR的/ lib /文件夾中。

+0

謝謝。所有這一切都是真實的,但它主要是我暫時堅持的開始腳本生成。 – 2009-11-09 16:11:00

0

像艾司科說,你應該創建一個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 
0

如果您使用的是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:/'` 
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` 
相關問題