2009-11-09 4 views
3

У меня есть проект, который использует ant для сборки и плющ для зависимостей. Я хотел бы сгенерировать стартовые скрипты для моего проекта с помощью classpath на основе зависимостей, настроенных в Ivy, тем более что порядок зависимостей может быть важным и должен быть сохранен из порядка в конфигурации плюща.Ivy, ant и start scripts

Кто-нибудь сделал это раньше? Мне также нужно генерировать относительные пути в пути к классам, поэтому я не могу использовать абсолютные пути, так как это будет работать только на машине, на которой выполняется сборка.

РЕДАКТИРОВАТЬ: На основе обратной связи, если мы вырезаем Ivy из уравнения (сделаем разрешение в каталог по своему выбору), я могу, вероятно, разрешить список libs ok. Но как бы я сгенерировал путь к классу, подходящий для стартового скрипта, особенно с относительными путями (относительно моего каталога bin)?

например.

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

Так что в моем bin/start.sh мне нужно иметь ../lib/ перед каждой ссылкой банку, а не полный абсолютный путь.

Спасибо.

ответ

0

Поскольку Айви выселяет перекрывающиеся зависимости и пытается найти наилучшую общую зависимость для всех проектов, я действительно не понимаю, как будет определен порядок зависимостей.

Однако вы должны сделать стандартную JAR/WAR/другую с Ant для своего проекта и включить зависимости Ivy внутри этого JAR. В основном все, что вам нужно сделать, это сделать задачу Ant для Ivy для разрешения зависимостей в папке, а затем построить классы с использованием этих зависимостей, а затем скомпоновать JAR, чтобы вы включили библиотеку JAR: s в новую созданную JAR/lib/папку ,

+0

Спасибо. Все верно, но в основном это начало генерации сценариев, на которые я застрял. –

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 
0

Если вы используете Java 1.6 вы может использовать файловые глобусы (т.е. java -cp "../lib/*"). Если вы используете более раннюю версию java, и вы не хотите использовать решение Владимира, вам нужно написать сценарий, в котором будет указано, что должно быть для класса.

Так 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»

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` 
Смежные вопросы