Включить внешние ресурсы в задачу сборки Ant - PullRequest
2 голосов
/ 05 декабря 2011

У меня есть скрипт сборки 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 Ответ

1 голос
/ 06 декабря 2011

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

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

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

  • $ HOME / .ant / lib
  • $ ANT_HOME / lib

build.xml

Ivy resol загрузки задач (и кешей)зависимости (находится в файле ivy.xml ).Задача cachepath автоматически заполняет classpath:

<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-one-jar.jar jar - это особая потребность в дополнительной спецификации классификатора .Если бы это была зависимость 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...