2017-01-05 7 views
0

私はspotify mavenプラグインを使用してfitnesseドッカー画像を作成し、それをコンテナで実行しています。私はfitnessifyを持ってきて、spotify mavenプラグインとドッカーを使わずにテストをローカルでうまく動かすことができますが、それらを使うときはテストを実行できません。 私はここますFitnesse Error messagespotify mavenプラグインとドッカーで使用したときのフィットネスエラー

を起動したとき、私は次のエラーを取得することは、一般的に、一般的にhttp://blog.xebia.com/fitnesse-and-dependency-management-with-maven/

!contents 

ごとに依存関係を解決するの面倒をFrontPageのますFitnesseのwikiの内容です!TEST_SYSTEM {スリム} を定義します!pomFileののpom.xml

は!ここにリリース$ {} FITNESSE_VERSION

に注意しています私のpom.xmlの内容は:

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 

         <shadeTestJar>true</shadeTestJar> 
         <transformers> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>fitnesseMain.FitNesseMain</mainClass> 
          </transformer> 
         </transformers>       
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>com.spotify</groupId> 
      <artifactId>docker-maven-plugin</artifactId> 
      <configuration> 
       <baseImage>${docker.registry.host.slash}mcpi/service</baseImage> 
       <entryPoint>["java","-jar","${serviceBin}/${finalJarName}.jar","-p","8000"]</entryPoint> 
       <imageName>mcpi/${project.name}</imageName> 
       <runs> 
        <run>mkdir -p ${serviceHome}</run> 
       </runs> 
       <workdir>${serviceHome}</workdir> 
       <resources> 
        <resource> 
         <targetPath>${serviceHome}</targetPath> 
         <directory>${basedir}/src/test/resources</directory> 
        </resource> 
        <resource> 
         <targetPath>${serviceBin}</targetPath> 
         <directory>${basedir}/target</directory> 
         <include>${finalJarName}.jar</include> 
        </resource> 
        <resource> 
         <targetPath>${serviceBin}</targetPath> 
         <directory>${basedir}/target</directory> 
         <include>${finalTestJarName}.jar</include> 
        </resource> 
        <resource> 
         <targetPath>${serviceBin}</targetPath> 
         <directory>${basedir}</directory> 
         <include>pom.xml</include> 
        </resource> 
       </resources> 
      </configuration> 
     </plugin> 

答えて

0

私はあなたの問題は!pomFileがあなたのドッキングウィンドウの画像の内部では動作しませんので、あなたのMavenの設定およびドッキングウィンドウの画像でリポジトリを、含まれていないことであるかもしれないと考えています。

あなたは、あなたがすべてのクラスと依存関係をバンドルしているので、おそらくそれは必要ありません。(少なくとも私はあなたのために 'shade plugin'が何をしていると仮定しますか?したがって、あなたが今経験している問題を防ぐために、おそらく 'mavenクラスパスのプラグインを無効にすることができます。 mavenクラスパスプラグインを無効にするには、dockerのFitNesseを起動してJavaコマンドラインに-Dfitnesse.wikitext.widgets.MavenClasspathSymbolType.Disable=trueを追加するか、wikiページからその行を削除しますが、ローカルでの作業方法に影響します。

しかし、あなたのテストがすぐに機能するかどうか、あるいは実際のテストが開始されたJavaプロセスのクラスパス上に生成された「最終的なjar」があることを確認するために余分なことをする必要があるかどうかはわかりません(ただし、!pomFileを削除し、shadeプラグインによって作成されたjarファイルから起動して、ローカルで試すことができます)。

+0

Spotifyはドッキングウィンドウ-のmaven-プラグインを使用してドッカーしたものを移動しました!pomFileを追加し、jarファイルの場所as_!path path/to/location/* .jar_をwikiに追加しました。フィクスチャクラスを見つけることはできますが、フィクスチャ** java.lang.NoClassDefFoundError:org.springframework.test.context.TestContextManager **で使用している依存関係を解決できません。しかし、私はそれをローカルで実行しても、JarファイルでTestContextManagerクラスを見つけられませんが、その場合はそれについて不平を言っていません。依存関係のないダミーフィクスチャーは正常に動作しています。私のフィットネスプロジェクトの構造はsrc/main/javaの代わりにfitness/src/test/javaです。動作に影響があるかどうかはわかりません。 – Raghu

+0

それは、シェードプラグインがすべての依存関係を見つけられないように思えます(私は、クラスがSpring/xmlを介して参照され、必要な依存関係としてそれらを検出しない直接の原因ではないという事実によって、たぶん、Maven依存プラグイン(コピー依存関係のゴールを使って)がよりうまくいくかもしれません。それは、より大きなドッカー画像を犠牲にして、すべての依存関係(使用されたものだけでなく)を取得します。 ( 'dependency:copy-dependencies'を使うことは、自分のプロジェクトで、フィットネスインストレーションの 'スタンドアローン'版を作るためのアプローチです。) –

+0

それは魅力的です。ありがとう!余分な依存関係を避けるために、** copy-dependencies **で ' true 'を使用しました。 – Raghu

0

Fitnessはdockerでmavenが設定されていないため、pom.xmlを解析できませんでした。私のfitnesse wikiに!pomFile pom.xmlの代わりに!path path/to/jars/*.jarを使用しました。

上記のエラーが消えていたものの

のmaven-シェードプラグイン春試験などのすべての依存関係を解決できませんでした。

私はすべての依存関係が

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${basedir}/target/dependencies</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> <excludeTransitive>true</excludeTransitive> </configuration> </execution> </executions> </plugin>に解決されるようにのpom.xmlするのmaven-依存-プラグインを追加する必要がありましたし、私は削除しようとした

<plugin> 
       <groupId>com.spotify</groupId> 
       <artifactId>docker-maven-plugin</artifactId> 
       <configuration> 
        <baseImage>${docker.registry.host.slash}service</baseImage> 
        <entryPoint>["java","-jar","${serviceBin}/${finalJarName}.jar","-p","8000"]</entryPoint> 
        <imageName>mcpi/${project.name}</imageName> 
        <runs> 
         <run>mkdir -p ${serviceHome}</run> 
        </runs> 
        <workdir>${serviceHome}</workdir> 
        <resources> 
         <resource> 
          <targetPath>${serviceHome}</targetPath> 
          <directory>${basedir}/src/test/resources</directory> 
         </resource> 
         <resource> 
          <targetPath>${serviceBin}</targetPath> 
          <directory>${basedir}/target</directory> 
          <include>${finalJarName}.jar</include> 
         </resource> 
         <resource> 
          <targetPath>${serviceBin}</targetPath> 
          <directory>${basedir}/target</directory> 
          <include>${finalTestJarName}.jar</include> 
         </resource> 

         <resource> 
          <targetPath>${serviceBin}</targetPath> 
          <directory>${basedir}/target/dependencies</directory> 
         </resource> 
        </resources> 
       </configuration> 
      </plugin> 
関連する問題