2017-01-05 2 views
0

Ich benutze Spotify Maven Plugin, um ein fitness Docker-Bild zu erstellen und es auf einem Container auszuführen. Ich bin in der Lage, die fitness zu bringen und die Tests erfolgreich lokal ohne Spotify Maven Plugin und Docker ausführen, aber nicht, wenn ich diese benutze. bekomme ich folgende Fehlermeldung, wenn ich die FitNesse Error messageFitnesse Fehler bei Verwendung mit Spotify Maven Plugin und Docker

Hier starten ist der Inhalt von Frontpage FitNesse Wiki die als Abhängigkeit der Lösung pro http://blog.xebia.com/fitnesse-and-dependency-management-with-maven/

!contents 

dauert in der Regel im allgemeinen Pflege! Definieren TEST_SYSTEM {schlank} ! pomFile pom.xml

! Anmerkung Mitteilung $ {FITNESSE_VERSION}

Hier ist die Inhalt meines 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> 

Antwort

0

Ich glaube, Ihr Problem, dass Sie Ihre Maven sein könnte Einstellungen und Repository im Docker Bild nicht enthalten, so dass die !pomFile nicht in Ihrem Docker Bild nicht funktionieren.

Nachdem gesagt, dass Sie es wahrscheinlich nicht brauchen, da Sie alle Ihre Klassen und Abhängigkeiten bündeln (zumindest nehme ich an, was das 'Schatten-Plugin' für Sie tut). Sie können also das 'maven class path plugin' deaktivieren, um das Problem zu vermeiden, das Sie jetzt haben. Die Deaktivierung des Maven-Klassenpfad-Plugins kann durch Hinzufügen von -Dfitnesse.wikitext.widgets.MavenClasspathSymbolType.Disable=true zu Ihrer Java-Befehlszeile erfolgen, indem Sie FitNesse in Docker starten (oder indem Sie die Zeile natürlich von der Wiki-Seite entfernen, was sich jedoch auf die lokale Arbeit auswirkt).

Aber ich weiß nicht, ob Ihre Tests sofort funktionieren, oder dass Sie etwas extra tun müssen, um sicherzustellen, dass das generierte 'final jar' im Klassenpfad des Java-Prozesses ist, der gestartet wird, sobald ein tatsächlicher Test ausgeführt wird gestartet (aber Sie können das lokal versuchen, indem Sie mit dem !pomFile entfernt starten und von dem Glas starten, das vom Schattenplugin erstellt wird).

+0

Ich versuchte Andockfenster mit Entfernen ! pomFile und hinzugefügt jar Dateien Speicherort as_! Pfad Pfad/zu/Ort/*. jar_ auf dem Wiki. Es ist zwar in der Lage, die Fixture-Klasse zu finden, aber die Abhängigkeit, die ich im Fixture verwende, kann ich nicht auflösen ** java.lang.NoClassDefFoundError: org.springframework.test.context.TestContextManager **. Allerdings finde ich die TestContextManager-Klasse nicht im Jar, auch wenn ich sie lokal ausführe, aber in diesem Fall beschwere ich mich nicht darüber. Dummy Fixture ohne Abhängigkeiten funktioniert gut. Meine Fitnesse-Projektstruktur ist fitness/src/test/java anstelle von src/main/java, nicht sicher, ob dies das Verhalten beeinflusst. – Raghu

+0

Es hört sich an, als ob das Schatten-Plugin nicht alle Abhängigkeiten findet (ich hatte ähnliche Probleme in der Vergangenheit, verursacht durch die Tatsache, dass Klassen über Spring/xml referenziert wurden und nicht direkt die Schatten als notwendige Abhängigkeiten auffassten). Vielleicht funktioniert das maven dependency plugin (mit seinem Kopierabhängigkeitsziel) besser für Sie: Das wird alle Abhängigkeiten (nicht nur die verwendeten) auf Kosten eines größeren Docker-Images bekommen. (Die Verwendung von Abhängigkeit: Kopierabhängigkeiten ist auch der Ansatz, den ich in meinen Projekten verwende, um eine Standalone-Version einer Fitnesse-Installation zu erstellen.) –

+0

Das funktioniert wie ein Zauber. Vielen Dank! Ich habe ' true' mit ** copy-dependencies ** verwendet, um zusätzliche Abhängigkeiten zu vermeiden. – Raghu

0

Fitnesse konnte pom.xml nicht analysieren, da Maven nicht im Andockfenster eingerichtet ist. Anstelle von !pomFile pom.xml in meinem Fitnesse-Wiki habe ich !path path/to/jars/*.jar verwendet.

Obwohl obige Fehler gegangen war, Maven-Schatten-Plugin könnten alle Abhängigkeiten wie feder Test nicht lösen.

Ich hatte Maven-Abhängigkeit-Plugin hinzufügen, so pom.xml, dass alle Abhängigkeiten <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>

aufgelöst und bewegt werden diejenigen spotify Docker-Maven-Plugin

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