依存関係管理機能を利用してjarをダウンロードし、antビルドのlibフォルダーに配置できるようにmavenをラップするantプラグインはありますか?
私の特定の問題は、Hudson用のCrap4jプラグインを使用していることですが、現時点ではMavenをサポートしていません。小さなプロジェクトなので、メイヴンはやり過ぎですが、必要がなければmvn dependency:copy-dependcies
なしで行きたくありません。
助言がありますか? (吸う以外)
Mavenがプロジェクトでやり過ぎだと思う場合は、試してみることができます/すべきです Apache Ivy :これはMavenのものと同様の非常に強力な依存関係管理ライブラリです。
Webでプロジェクトをホストしている場合は、 Ivy Roundup も参照してください。これは、さまざまなライブラリのIvy定義のリポジトリです。
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からの今後の多くの開発が期待できます。使い始めたい場合は、 オレグのハウツーページ をご覧ください。 (注:この情報はまもなく 決定的なガイド に統合されます)
水銀タスクは機能しますが、私はそれらを使用していません。私は彼らの前任者である 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
に入れたい場合は、このようなものを宣言する必要はありません。おもう。
Maven Ant Tasks を使用するだけです。それらは 通常のMavenダウンロードページ でダウンロードできます。
これを参照してください: MavenまたはIvyの代わりにMaven Antタスクを使用する必要がある理由
上記のリンクに記載されている理由から、Ivyはあまりお勧めしません。
私の場合、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>
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ゴールを実行できます...
楽しい....
ダウンロード 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>
私は今同じ問題に取り組んでいます。必要なすべてのライブラリをローカルの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>