こんにちは、私は現在、POMを修正するようにだけでなく、それが簡単にターゲットサーバー上で実行することができます展開パッケージを作成するコードをコンパイルしていますMavenのライフサイクル災禍 - 「前の統合テスト」
。
親POMは、順番に組み込まれる多くのモジュールを呼び出します。これらのモジュールからビルドアーチファクトをすべて既知の場所に取得するために、独自のPOMを持つ「ディストリビューション」という新しいモジュールを追加しました。このPOMには、MavenアセンブリとMaven AntRun用のプラグインがあります。
アセンブリプラグインは、「パッケージ」のライフサイクルにフックされています
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>distro-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembler.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
アセンブラXMLを出力ディレクトリに必要なファイルを持ってmoduleSetsとファイルセットの両方を使用しています。私は、 'useAllReactorProjects'フラグを使用して、システムがデプロイメントパッケージに含める必要があるビルドされた 'war'ファイルをすべて取得するようにします。
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>bin</id>
<formats>
<format>dir</format>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.example.fire:fire-apis-admin-pack-sesame-rest</include>
<include>com.example.fire:fire-apis-asset-pack-sesame-rest</include>
<include>com.example.fire:fire-apis-event-pack-sesame-rest</include>
<include>com.example.fire:fire-apis-geonames-pack-sesame-rest</include>
<include>com.example.fire:fire-apis-stuff-pack-sesame-rest</include>
</includes>
<binaries>
<outputDirectory>modules</outputDirectory>
<unpack>false</unpack>
</binaries>
</moduleSet>
</moduleSets>
<!-- Include the Deployment code -->
<fileSets>
<fileSet>
<directory>${almfx.path}</directory>
<outputDirectory>almfx</outputDirectory>
<includes>
<include>**</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
</fileSets>
</assembly>
このすべてがうまく機能し、私はmvn package
を実行すると、私は、出力ディレクトリ内のファイルを見ることができます。
次のビットは問題が発生している場所です。あなたは私がこの仕事をするためにantrunプラグインを使用しようとしています見ることができるように
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>pre-integration-test</phase>
<configuration>
<target>
<echo message="Calling ANT from Maven" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
:私は「事前統合テスト」のライフサイクルにフックしようとしているので、私はパッケージにいくつかのより多くの作業を行う必要があります。私はちょうど現時点で簡単なテストをしており、それは画面に何かを出力することです。
今度はmvn pre-integration-test
を実行すると、 'パッケージ'段階は以前と同じように動作し、すべての出力が表示されます。しかし、「統合前テスト」段階になると、欠けているアーティファクトに問題が生じます。
私は、システムがコードを構築し、それがすべてローカルにあると考えていれば、他の人工物を探し出すことはないと考えました。それが探しているアーティファクトは、コンパイルされたものであり、ローカルリポジトリまたはリモートリポジトリにはありません。
「パッケージ」フェーズの出力で作業したいだけなので、ダウンロードする必要はありませんが、これをどのように達成できるかはわかりません。私はこれを回避する方法を試して試してみるためにネットの周りを見てきましたが、すべての例は私がやっているのと同じように見えるようです。
誰かが私が間違っていることを指摘している場合は、私に知らせてください。 私は必要なすべての情報を提供してもらいたいと思いますが、もう必要があれば教えてください。私はそれを提供して喜んでします。 AntRunプラグインはの一部であるように、私は少し配布POMを修正アンドリュースの提案の後2012-02-08 1450
:事前に
おかげで非常に多くの、
ラッセル
UPDATE同じ 'パッケージ'段階。 AntRunプラグインが「シングル」を目標にしていないので、私は同じ目標にアタッチすることができませんでした。
残念ながら、システムが既に構築したリポジトリから何かをダウンロードしようとしているのと同じ問題が発生しています。私が得るエラーの種類は次のとおりです。私は、これはこれを行う方法だろうと思って、私はこれに困惑しています
Downloading: http://nexus/nexus/content/groups/public/com/example/fire/fire-apis/latest-SNAPSH
OT/fire-apis-latest-20120208.061113-108.jar
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) com.example.fire:fire-apis:jar:latest-SNAPSHOT
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=com.example.fire -DartifactId=fire-apis -Dversion=latest-20120208.0611
13-108 -Dpackaging=jar -Dfile=/path/to/file
Alternatively, if you host your own repository you can deploy the file there:
mvn deploy:deploy-file -DgroupId=com.example.fire -DartifactId=fire-apis -Dversion=latest-20120208.061113
-108 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
Path to dependency:
1) com.example.fire:distribution:pom:latest-SNAPSHOT
2) com.example.fire:fire-apis:jar:latest-SNAPSHOT
----------
1 required artifact is missing.
for artifact:
com.example.fire:distribution:pom:latest-SNAPSHOT
from the specified remote repositories:
public-mirror (http://nexus/nexus/content/groups/public)
。私は何かが足りないことを知っている。私はそれが役立つ場合は、ログを投稿することができますが、それは巨大になります。
UPDATE:2012-02-09 1130
人々は私がペーストビン上にいくつかの情報を掲載しているやろうとしています何のより良いビューを持つように。
親POM - http://pastebin.com/adpnZVe1
分配モジュールのPOM - http://pastebin.com/bycHcqgk
Mavenのデバッグログ - http://pastebin.com/dDBV5uNM
これはAntRunセクションに関係する主要なログファイルの終わりに向かってスニペットです。 (メインログファイルは11Mb以上です!)
useAllReactorProjects
フラグを使用してこのパッケージを行うには、このページの例に従います。http://maven.apache.org/plugins/maven-assembly-plugin/examples/multimodule/module-binary-inclusion-simple.html。
ありがとうございました。
グッドは、私たちのプロジェクトのほとんどは、我々は常に最後に来て、残りのモジュールに依存「パッケージ」ユーティリティモジュールを持っている)=解決されます。このアプローチはうまくいくようです。 –