2017-01-05 1 views
0

Я использую плагин spotify maven для создания изображения докеры фитнеса и запуска его на контейнер. Я могу принести аптеку и успешно запустить тесты локально, не используя patchify maven plugin и docker, но не тогда, когда я их использую. я получаю следующее сообщение об ошибке, когда я начинаю FitNesse Error messageОшибка при использовании при использовании с spotify maven plugin and docker

Вот содержимое FRONTPAGE FitNesse вики, которые обычно обычно заботятся о разрешении зависимостей согласно http://blog.xebia.com/fitnesse-and-dependency-management-with-maven/

!contents 

! Определить TEST_SYSTEM {тонкого} ! pomFile pom.xml

! примечание Release $ {} 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

Я считаю, что ваша проблема может быть, что вы не включают в себя параметры Maven и хранилище в Докер изображения, поэтому !pomFile не работает внутри Docker изображения.

Сказав это, вы, вероятно, не нуждаетесь в нем, поскольку вы объединяете все ваши классы и зависимости (по крайней мере, я предполагаю, что для вас используется «плагин тени»). Таким образом, вы можете, вероятно, отключить плагин path path для maven, чтобы предотвратить возникшую проблему. Отключение плагина maven classpath можно сделать, добавив -Dfitnesse.wikitext.widgets.MavenClasspathSymbolType.Disable=true в вашу командную строку Java, начиная с FitNesse в докере (или, конечно, удалив строку с вики-страницы, но это влияет на то, как вы работаете локально).

Но я не знаю, будут ли ваши тесты работать немедленно или что вы должны сделать что-то дополнительное, чтобы сгенерированная «финальная банка» находилась на пути к классу Java-процесса, который запускается после фактического теста (но вы можете попробовать это локально, выполнив удаление !pomFile и начиная с банки, созданной теневым плагином).

+0

Я попытался удалить ! pomFile и добавлены файлы jar-файлов как путь к пути/в/location/*. jar_ в вики. Он может найти класс fixture, но не может разрешить зависимость, которую я использую в fixture ** java.lang.NoClassDefFoundError: org.springframework.test.context.TestContextManager **. Тем не менее, я не нашел класс TestContextManager в банке, даже когда я запускаю его локально, но в этом случае он не жалуется. Манекен с без зависимостей работает нормально. Моя проектная структура фитнеса - это фитнес/src/test/java вместо src/main/java, не уверен, что это влияет на поведение. – Raghu

+0

Похоже, что теневой плагин не находит всех зависимостей (у меня были аналогичные проблемы в прошлом, вызванные тем, что классы ссылались через Spring/xml, а не заставляли тень не обнаруживать их как необходимые зависимости). Возможно, плагин зависимостей maven (с использованием его цели копий-зависимостей) работает лучше для вас: он получит все зависимости (а не только от используемых) за счет более крупного изображения докеров. (Использование 'dependency: copy-dependencies' также является подходом, который я использую в своих проектах для создания« автономной »версии установки для фитнеса.) –

+0

Это работает как шарм. Благодаря! Я использовал ' true' с ** копиями-зависимостями **, чтобы избежать дополнительных зависимостей. – Raghu

0

Fitnesse не смог разобрать pom.xml, поскольку maven не настроен в докере. Вместо !pomFile pom.xml в моей викторине, я использовал !path path/to/jars/*.jar.

Хотя ушел выше ошибка, Maven-тень-плагин не может решить все зависимости, как весна-тест.

мне пришлось добавить Maven-зависимость-плагин pom.xml так, что все зависимости будут разрешены <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>

и переехал тех докер с помощью Spotify Докер-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> 
Смежные вопросы