2011-12-05 3 views
2

У меня есть скрипт сборки Ant для генерации некоторых классов. Для этого процесса требуется внешняя библиотека. Поскольку мне нужна эта задача для множества разных модулей, я не хочу копировать lib каждый раз, и я не хочу ссылаться на нее локально, так как это потребует, чтобы все разработчики сначала загрузили lib. Как я могу ссылаться и включать внешний ресурс? Это моя установка до сих порВключить внешние ресурсы в задачу сборки Ant

<project name="generate" basedir="."> 

    <property name="src" location="src/main/java"/> 
    <property name="generated" location="target/classes"/> 
    <property name="build" location="src/main/java"/> 

    <path id="cp"> 
     <fileset dir="path/to/lib" includes="**/querydsl-jpa-2.2.3-apt-one-jar.jar"/> 
    <fileset dir="path/to/.m2" includes="**/*.jar"/> 
    </path> 


    <target name="compile" > 
    <!-- Compile the java code from ${src} into ${build} --> 
    <javac srcdir="${src}" classpathref="cp" includeantruntime="false"> 
     <compilerarg value="-proc:only"/>  
     <compilerarg value="-processor"/> 
     <compilerarg value="com.mysema.query.apt.QuerydslAnnotationProcessor"/> 
     <compilerarg value="-s"/> 
     <compilerarg value="${generated}"/> 
    </javac> 

    <!-- compilation --> 
    <javac classpathref="cp" destdir="${build}" includeantruntime="false">  
     <src path="${src}"/> 
     <src path="${generated}"/> 
    </javac> 
    </target> 

</project> 

Теперь у меня есть querydsl-jpa-2.2.3-apt-one-jar.jar на каком-то удаленном месте, и я также хочу, чтобы ссылаться на наш внутренний репозиторий Maven вместо локального каталога .m2, так что мне нужно ссылаться на удаленные места и включают в себя библиотеки оттуда.

ответ

1

Я предлагаю вам использовать подключаемый модуль ANT Apache ivy ANT. Это может помочь вам в двух направлениях:

  1. Ivy можно скачать библиотеки в той же манере, как Maven
  2. Ваша библиотека уже не является доступным из Maven Central (Нет необходимости хранить его на своем сайте)

Разработчики, использующие ваш проект будет необходима только плющ банку установлен в одном из следующих мест:

  • $ HOME/.ant/Lib
  • $ ANT_HOME/Библиотека

build.xml

Плющ решительность загрузки задачи (и кэши) зависимостей (найдено в ivy.xml файл). cachepath задача автоматически заполнит: путь к классам

<project name="generate" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant"> 

    <property name="src" location="src/main/java"/> 
    <property name="generated" location="target/classes"/> 
    <property name="build" location="src/main/java"/> 

    <target name="resolve" > 
     <ivy:resolve/> 
     <ivy:cachepath pathid="cp" conf="compile"/> 
    </target> 

    <target name="compile" depends="resolve"> 
    .. 

ivy.xml

Зависимости объявлены здесь:

<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra"> 

    <info organisation="com.myspotontheweb" module="demo"/> 

    <configurations defaultconfmapping="compile->default"/> 

    <dependencies> 
     <!-- Your jar --> 
     <dependency org="com.mysema.querydsl" name="querydsl-jpa" rev="2.2.3" > 
      <artifact name="querydsl-jpa" type="jar" m:classifier="apt-one-jar"/> 
     </dependency> 

     <!-- Other Maven dependencies --> 
     <dependency org="commons-lang" name="commons-lang" rev="2.6"/> 
     .. 

    </dependencies> 

</ivy-module> 

querydsl-JPA-2.2.3-APT-он- jar.jar jar - это особые потребности дополнительно classifier спецификация. Если это была Maven зависимость она будет объявлена ​​следующим образом:

<dependency> 
    <groupId>com.mysema.querydsl</groupId> 
    <artifactId>querydsl-jpa</artifactId> 
    <version>2.2.3</version> 
    <classifier>apt-one-jar</classifier> 
</dependency> 

ivysettings.xml

Ivy может быть настроен использовать репозиторий Maven (Так же, как клиент Maven):

<ivysettings> 
    <settings defaultResolver="maven-repo"/> 
    <resolvers> 
     <ibiblio name="maven-repo" m2compatible="true" root="http://myrepo.mycompany.com/maven-central-proxy"/> 
    </resolvers> 
</ivysettings> 
+0

Вчера я не заметил вашего ответа, поэтому у нас есть обходное решение для нашей ситуации. Но может быть, нам придется переосмыслить это. Ваш ответ звучит хорошо, спасибо! (хотя мне не нравится размер локальной настройки, особенно для настройки ivysettings). Где я могу разместить ivy.xml? На том же уровне, что и build.xml? – Pete

+0

ivy.xml по умолчанию находится в том же каталоге, что и build.xml. Maven также использует два файла, один для зависимостей проекта, другой для настроек среды. –

Смежные вопросы