Подтвердить что ты не робот

Использование Maven из Ant

Существуют ли ant плагины, которые переносят maven, чтобы я мог использовать его функции управления зависимостями для загрузки jars для меня и поместить их в папку ant build lib?

Моя конкретная проблема в том, что я использую плагин Crap4j для Hudson, но пока это не поддерживает Maven. Поскольку это небольшой проект, maven является излишним, но я не хочу идти без mvn dependency:copy-dependcies, если мне это не нужно.

Любые предложения? (кроме отсоса)

4b9b3361

Ответ 1

Если вы думаете, что Maven переполнен в вашем проекте, вы можете/должны попробовать Apache Ivy: это очень мощная библиотека управления зависимостями, подобная Maven.

Если вы размещаете проект в Интернете, посмотрите также Ivy Roundup, это репозиторий определений Ivy для различных библиотек.

Ответ 2

Существует новый набор задач Ant, которые используют Mercury. Mercury - это реорганизованный код, который станет основой того, как Maven 3 взаимодействует с репозиториями Maven (и OSGi), которые реализует Олег Гусаков. Меркурий хорошо протестирован, и вы можете начать использовать его в проектах Ant сегодня. Взгляните на некоторые из документов How-to, которые написал Олег:

http://people.apache.org/~ogusakov/sites/mercury-ant/mercury-ant-tasks/howto.html

Вот простой пример использования Mercury в файле Ant build.xml. Следующий файл сборки создает путь к классу, который зависит от версии 3.0 артефакта asm:

<javac srcdir="src/main/java"
       destdir="target/classes">
  <classpath> 
    <deps>
      <dependency name="asm:asm:3.0"/>
    </deps>
  </classpath>
</javac>

Существует множество дополнительных функций, таких как поддержка проверки подписей PGP или дайджестов MD5. Вы также можете начать определять разные репозитории, от которых зависит Mercury. Этот XML позволяет вам определить ссылку на репозиторий, такую ​​как Nexus в дополнение к использованию локального каталога в качестве репозитория:

<repo id="myCentral" 
 url="http://localhost:8081/nexus/contengs/groups/public"/>
<repository dir="/my/local/repo"/>

<javac srcdir="src/main/java"
       destdir="target/classes">
  <classpath> 
    <deps>
      <dependency name="asm:asm:3.0"/>
    </deps>
  </classpath>
</javac>

Если вам нужно ссылаться на репозиторий, требующий аутентификации, у Mercury есть поддержка для хранения имени пользователя и пароля:

<repo id="myCentral" 
 url="http://localhost:8081/nexus/contengs/groups/public">
  <auth name="foo" pass="bar"/>
</repo>

<javac srcdir="src/main/java"
       destdir="target/classes">
  <classpath> 
    <deps>
      <dependency name="asm:asm:3.0"/>
    </deps>
  </classpath>
</javac>

Наиболее убедительной является возможность публикации артефакта в репозитории из файла сборки Ant. Если вы работаете в организации любого масштаба, вам нужно начать думать о развертывании артефактов в диспетчере репозитория, например Nexus. С помощью Mercury вы можете начать развертывание артефактов в менеджере хранилища без необходимости принимать Maven. Здесь файл сборки, который определяет аутентифицированный репозиторий и записывает артефакт:

<repo id="myCentral" 
 url="http://localhost:8081/nexus/contengs/groups/public">
  <auth name="foo" pass="bar"/>
</repo>

<write repoid="myCentral"
       name="t:t:1.0"
       file="${basedir}/target/t.jar"/>

Меркурий готов к использованию, и вы можете ожидать много событий от продвижения Олега. Если вы хотите начать использовать его, лучшее место для поиска - Страница "Олег" . (Примечание: эта информация вскоре будет интегрирована в Окончательное руководство)

Ответ 3

В то время как задачи по ртути работают, я их не использовал. У меня были хорошие успехи со своими предшественниками, maven- ant -tasks. Они довольно просты в работе, если у вас уже есть POM.

<project name="blah" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
  <!-- If you drop the maven-ant-tasks in ~/.ant/lib, you don't need these two bits. -->
  <taskdef uri="antlib:org.apache.maven.artifact.ant"
           resource="org/apache/maven/artifact/ant/antlib.xml"
           classpathref="ant.classpath" />
  <path id="ant.classpath">
    <fileset dir="${ant.tasks.dir}">
      <include name="*.jar" />
    </fileset>
  </path>
  <target name="resolve" description="--> retrieve dependencies with maven">
      <!-- Resolve dependencies -->
      <artifact:dependencies filesetId="dependency.fileset">
          <pom file="pom.xml" />
      </artifact:dependencies>
      <!-- Copy all dependencies to the correct location. -->
      <copy todir="${web.dir}/WEB-INF/lib">
          <fileset refid="dependency.fileset" />
          <!-- This mapper strips off all leading directory information -->
          <mapper type="flatten" />
      </copy>
  </target>
</project>

Мне нравится сохранять jQuery ant внутри проекта, поэтому я добавил taskdef и path. Но если вы хотите поместить maven-ant-tasks-2.0.9.jar в ~/.ant/lib, вам не нужно объявлять этот материал. Я думаю.

Ответ 6

Очень просто запустить цель Maven из Ant

<target name="buildProject" description="Builds the individual project">
    <exec dir="${source.dir}\${projectName}" executable="cmd">
        <arg value="/c"/>
        <arg value="${env.MAVEN_HOME}\bin\mvn.bat"/>
        <arg line="clean install" />
    </exec>
</target>

С помощью этого вы можете запускать любую цель Maven из Ant...

Enjoy....

Ответ 7

В моем случае я просто хочу, чтобы ящик ejb находился в репозитории, поэтому я мог бы использовать его в другом проекте с maven как зависимость, поэтому:

<target name="runMaven" depends="deploy" description="LLama al maven.">
    <exec executable="cmd">
        <arg value="/c"/>
        <arg value="mvn.bat install:install-file -DgroupId=com.advance.fisa.prototipo.camel -DartifactId=batch-process -Dversion=1.0 -Dpackaging=jar  -Dfile=${jarDirectory}\batch-process.jar"/>
    </exec>
</target>

Ответ 8

Загрузите Maven Ant Задачи, затем используйте это:

<target name="getDependencies">
        <path id="maven-ant-tasks.classpath" path="${basedir}${file.separator}maven${file.separator}lib${file.separator}maven-ant-tasks.jar" />
        <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant" classpathref="maven-ant-tasks.classpath" />

        <artifact:dependencies filesetId="dependency.fileset" type="jar">
            <pom file="pom.xml" />
        </artifact:dependencies>

        <!--TODO take care of existing duplicates in the case of changed/upgraded dependencies-->
        <copy todir="lib">
            <fileset refid="dependency.fileset" />
            <mapper type="flatten" from="${dependency.versions}" />
        </copy>
    </target>

Ответ 9

Я работаю над той же проблемой прямо сейчас. Я установил все необходимые библиотеки в моем локальном репозитории Maven и оттуда я поместил его в нашу компанию Maven Repo. Он работает не совсем правильно. Некоторые из тестов не работают, что хорошо работает в моем тестовом прогоне Maven, но поскольку результат теста не важен для данных покрытия, я вполне удовлетворен.

Вот мой Maven фрагмент. Надеюсь, это поможет.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.1</version>
    <inherited>false</inherited>
    <executions>
        <execution>
            <phase>site</phase>
            <configuration>
                <tasks>
                    <property name="compile_classpath" refid="maven.compile.classpath"/>
                    <property name="runtime_classpath" refid="maven.runtime.classpath"/>
                    <property name="test_classpath" refid="maven.test.classpath"/>
                    <property name="plugin_classpath" refid="maven.plugin.classpath"/>
                    <property name="CRAP4J_HOME" value="${user.home}/Projects/crap4j"/>
                    <taskdef name="crap4j" classname="org.crap4j.anttask.Crap4jAntTask">
                        <classpath>
                            <fileset dir="${CRAP4J_HOME}/lib">
                                <include name="**/*.jar"/>
                            </fileset>
                        </classpath>
                    </taskdef>
                    <crap4j projectdir="${project.basedir}/alm-jar-server"
                            outputDir="${project.basedir}/crap4jReports"
                            dontTest="false"
                            debug="true">
                        <classes>
                            <pathElement location="${project.basedir}/target/classes"/>
                        </classes>
                        <srces>
                            <pathElement location="${project.basedir}/src/main/java"/>
                        </srces>
                        <testClasses>
                            <pathElement location="${project.basedir}/target/test-classes"/>
                        </testClasses>
                        <libClasspath>
                            <fileset dir="${user.home}/.m2/repository">
                                <include name="**/*.jar"/>
                            </fileset>
                        </libClasspath>
                    </crap4j>


                   </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.crap4j</groupId>
            <artifactId>crap4j</artifactId>
            <version>1.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.kohsuke</groupId>
            <artifactId>args4j</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.agitar</groupId>
            <artifactId>asmlib</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>com.agitar</groupId>
            <artifactId>coverage</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</plugin>