[英]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.