2012-02-07 13 views
0

こんにちは、私は現在、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

ありがとうございました。

答えて

0

朝、

問題を見てから少し時間をとって、私は答えを見つけたと思う。

最後の更新で述べたように、私はこのリンクの例に従っていましたhttp://maven.apache.org/plugins/maven-assembly-plugin/examples/multimodule/module-binary-inclusion-simple.html。このページには、配布モジュールのPOMの例が示されています。配布前に他のモジュールが確実にビルドされるように依存関係があります。

これは、ログファイルに示されているように、システムがリポジトリから取得しようとしていたプロジェクトを含むように変更しました。私はこれをコメントアウトして、AntRunは期待通りに動作します。

私が心配している唯一のことは、注文が正しいとは限りません。リストの最後に「配布」モジュールを置くことで、それが最後に構築されることを願っています。

ありがとうございました。問題を聞いて

ラッセル

+0

グッドは、私たちのプロジェクトのほとんどは、我々は常に最後に来て、残りのモジュールに依存「パッケージ」ユーティリティモジュールを持っている)=解決されます。このアプローチはうまくいくようです。 –

関連する問題