web-dev-qa-db-ja.com

AntのMavenを使用する

依存関係管理機能を利用してjarをダウンロードし、antビルドのlibフォルダーに配置できるようにmavenをラップするantプラグインはありますか?

私の特定の問題は、Hudson用のCrap4jプラグインを使用していることですが、現時点ではMavenをサポートしていません。小さなプロジェクトなので、メイヴンはやり過ぎですが、必要がなければmvn dependency:copy-dependciesなしで行きたくありません。

助言がありますか? (吸う以外)

18
Allain Lalonde

Mavenがプロジェクトでやり過ぎだと思う場合は、試してみることができます/すべきです Apache Ivy :これはMavenのものと同様の非常に強力な依存関係管理ライブラリです。

Webでプロジェクトをホストしている場合は、 Ivy Roundup も参照してください。これは、さまざまなライブラリのIvy定義のリポジトリです。

10
Vladimir

Mercuryを使用するAntタスクの新しいセットがあります。 Mercuryは、Maven 3がOleg Gusakovによって実装されているMaven(およびOSGi)リポジトリーと対話する方法の基礎となるリファクタリングされたコードです。 Mercuryは十分にテストされており、今日からAntプロジェクトで使用を開始できます。 Olegが書いたハウツードキュメントのいくつかを見てください。

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

これは、Antbuild.xmlファイルでMercuryを使用する簡単な例です。次のビルドファイルは、asmアーティファクトのバージョン3.0に依存するクラスパスを作成します。

<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"/>

Mercuryはすぐに使用でき、Olegからの今後の多くの開発が期待できます。使い始めたい場合は、 オレグのハウツーページ をご覧ください。 (注:この情報はまもなく 決定的なガイド に統合されます)

13
Tim O'Brien

水銀タスクは機能しますが、私はそれらを使用していません。私は彼らの前任者である 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>

Antタスクjarをプロジェクト内に保持するのが好きなので、taskdefとpathを追加しました。ただし、maven-ant-tasks-2.0.9.jar~/.ant/libに入れたい場合は、このようなものを宣言する必要はありません。おもう。

11

Maven Ant Tasks を使用するだけです。それらは 通常のMavenダウンロードページ でダウンロードできます。

5
whaley

これを参照してください: MavenまたはIvyの代わりにMaven Antタスクを使用する必要がある理由

上記のリンクに記載されている理由から、Ivyはあまりお勧めしません。

4
Peter Thomas

私の場合、ejb jarをリポジトリに配置して、依存関係として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>
2
cabaji99

AntからMavenゴールを実行するのは非常に簡単です

<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>

これを使用すると、Antからあらゆる種類のMavenゴールを実行できます...

楽しい....

2
Dhaval Patel

ダウンロード Maven Ant Tasks 次にこれを使用します:

<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>
1
Randyaa

私は今同じ問題に取り組んでいます。必要なすべてのライブラリをローカルのMavenリポジトリにインストールし、そこから会社のMavenリポジトリに配置しました。まだ正しく機能していません。一部のテストは失敗し、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>
0
Johannes