Ошибка Fitnesse Maven Classpath

Я пытаюсь настроить Fitnesse в своем текущем проекте.

Конфигурация pom.xml имеет:

<!-- https://mvnrepository.com/artifact/org.fitnesse/fitnesse -->
<dependency>
    <groupId>org.fitnesse</groupId>
    <artifactId>fitnesse</artifactId>
    <version>20161106</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.fitnesse.plugins</groupId>
    <artifactId>maven-classpath-plugin</artifactId>
    <version>1.9</version>
    <scope>runtime</scope>
</dependency>
<plugins>
    <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.6</version>
        <executions>
            <execution>
                <id>start-fitnesse</id>
                <phase>test</phase>
                <configuration>
                    <tasks>
                        <echo taskname="fitnesse" message="Starting FitNesse..." />
                        <java classname="fitnesseMain.FitNesseMain" classpathref="maven.runtime.classpath" fork="true">
                            <arg line="-p 8000" />
                            <arg line="-d ." />
                        </java>
                    </tasks>
                </configuration>
                <goals>
                    <goal>run</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

Без создания plugins.properties я могу запустить фитнес-сервер. Но мне нужно ввести зависимости maven для запуска фитнес-тестов, для которых я создал файл plugins.properties рядом с pom.xml. В plugins.properties есть:

SymbolTypes = fitnesse.wikitext.widgets.MavenClasspathSymbolType

Теперь, когда я добавляю этот файл, я получаю следующую ошибку при запуске сервера:

main:
 [fitnesse] Starting FitNesse...
     [java] SEVERE: Error while starting the FitNesse [Unable to instantiate component for type fitnesse.wikitext.widgets.MavenClasspathSymbolType]
     [java] fitnesse.components.ComponentInstantiationException: Unable to instantiate component for type fitnesse.wikitext.widgets.MavenClasspathSymb
olType
     [java]     at fitnesse.components.ComponentFactory.createComponent(ComponentFactory.java:75)
     [java]     at fitnesse.plugins.PropertyBasedPluginFeatureFactory$8.register(PropertyBasedPluginFeatureFactory.java:152)
     [java]     at fitnesse.plugins.PropertyBasedPluginFeatureFactory.forEachClass(PropertyBasedPluginFeatureFactory.java:144)
     [java]     at fitnesse.plugins.PropertyBasedPluginFeatureFactory.forEachObject(PropertyBasedPluginFeatureFactory.java:150)
     [java]     at fitnesse.plugins.PropertyBasedPluginFeatureFactory.registerSymbolTypes(PropertyBasedPluginFeatureFactory.java:75)
     [java]     at fitnesse.plugins.PluginsLoader.loadSymbolTypes(PluginsLoader.java:87)
     [java]     at fitnesse.ContextConfigurator.makeFitNesseContext(ContextConfigurator.java:151)
     [java]     at fitnesseMain.FitNesseMain.launchFitNesse(FitNesseMain.java:69)
     [java]     at fitnesseMain.FitNesseMain.launchFitNesse(FitNesseMain.java:58)
     [java]     at fitnesseMain.FitNesseMain.main(FitNesseMain.java:38)
     [java] Caused by: java.lang.reflect.InvocationTargetException
     [java]     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
     [java]     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
     [java]     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
     [java]     at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
     [java]     at fitnesse.components.ComponentFactory.createComponent(ComponentFactory.java:72)
     [java]     ... 9 more
     [java] Caused by: java.lang.NoSuchMethodError: com.google.common.collect.MapMaker.makeComputingMap(Lcom/google/common/base/Function;)Ljava/util/c
oncurrent/ConcurrentMap;
     [java]     at com.google.inject.internal.Annotations$AnnotationChecker.<init>(Annotations.java:104)
     [java]     at com.google.inject.internal.Annotations.<clinit>(Annotations.java:122)
     [java]     at com.google.inject.Key.ensureRetainedAtRuntime(Key.java:362)
     [java]     at com.google.inject.Key.strategyFor(Key.java:354)
     [java]     at com.google.inject.Key.get(Key.java:222)
     [java]     at org.sonatype.guice.bean.binders.ParameterKeys.<clinit>(ParameterKeys.java:23)
     [java]     at org.codehaus.plexus.DefaultPlexusContainer$ContainerModule.configure(DefaultPlexusContainer.java:801)
     [java]     at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:229)
     [java]     at com.google.inject.spi.Elements.getElements(Elements.java:103)
     [java]     at com.google.inject.spi.Elements.getElements(Elements.java:80)
     [java]     at org.sonatype.guice.bean.binders.MergedModule.configure(MergedModule.java:54)
     [java]     at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:229)
     [java]     at com.google.inject.spi.Elements.getElements(Elements.java:103)
     [java]     at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:136)
     [java]     at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
     [java]     at com.google.inject.Guice.createInjector(Guice.java:94)
     [java]     at com.google.inject.Guice.createInjector(Guice.java:71)
     [java]     at com.google.inject.Guice.createInjector(Guice.java:61)
     [java]     at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:470)
     [java]     at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:196)
     [java]     at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:160)
     [java]     at fitnesse.wikitext.widgets.MavenClasspathExtractor.buildPlexusContainer(MavenClasspathExtractor.java:219)
     [java]     at fitnesse.wikitext.widgets.MavenClasspathExtractor.buildPlexusContainer(MavenClasspathExtractor.java:215)
     [java]     at fitnesse.wikitext.widgets.MavenClasspathExtractor.<init>(MavenClasspathExtractor.java:51)
     [java]     at fitnesse.wikitext.widgets.MavenClasspathSymbolType.<init>(MavenClasspathSymbolType.java:39)
     [java]     ... 14 more
     [java] Java Result: 1
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.552 s
[INFO] Finished at: 2018-03-27T12:58:00-04:00
[INFO] Final Memory: 29M/500M
[INFO] ------------------------------------------------------------------------
[WARNING] The requested profile "fitnesse" could not be activated because it does not exist.

Что мне нужно сделать, чтобы Fitnesse заработал?


person RDM    schedule 27.03.2018    source источник


Ответы (1)


Вероятно, у вас есть другая библиотека в пути к классам среды выполнения, которая использует более новую версию guice, чем используется плагином пути к классам maven. У меня было что-то подобное, когда я поместил селен в путь к классам при выполнении тестов: это сломало плагин пути к классам maven.

Теперь я использую две стратегии для проведения фитнес-тестов:

  1. При локальном запуске вики я использую плагин maven classpath, но я запускаю вики с помощью «standalone.jar» (java -jar fitness-standalone.zip -p 8000) и помещаю jar плагина с зависимостями (классификатор maven «jar-with-dependencies») в «плагины». ' подкаталог. Таким образом, ни одна из зависимостей моего приспособления не находится в пути к классам вики (вики запускает новую JVM с путем к классам, сгенерированным подключаемым модулем maven, для запуска приспособлений, в которых подключаемый модуль пути к классам maven не используется). Так что конфликтов с зависимостями нет.
  2. Когда я отлаживаю приборы, я запускаю FitNesse и тесты в одной и той же JVM с путем к классам, сгенерированным моей IDE. В этом случае мне не нужен плагин пути к классам maven (поскольку путь к классам уже создан на основе pom.xml в среде IDE). Затем я гарантирую, что плагин maven classpath деактивирован, установив для системного свойства fitnesse.wikitext.widgets.MavenClasspathSymbolType.Disable значение true. Тогда вики понимает символ !pom в вики, но сам плагин не пытается выяснить все зависимости maven, предотвращая исключение, с которым вы столкнулись.

Полную информацию можно найти в pom.xml. моих исходных данных/проекта FitNesse. И пример, использующий этот базовый план для решения всех этих задач, доступен в виде отдельного проекта. .

person Fried Hoeben    schedule 28.03.2018
comment
Спасибо, это очень помогает. Я переместил фитнес-зависимости в начало списка зависимостей, и это сработало для меня. Но я обязательно буду использовать вышеупомянутые стратегии. - person RDM; 28.03.2018
comment
При настройке Fitnesse я столкнулся с другой проблемой. Не могли бы вы взглянуть здесь: stackoverflow.com/questions/49556752/ - person RDM; 29.03.2018
comment
Похоже, это точно такая же проблема: конфликты зависимостей между плагином maven-classpath-plugin и вашими приборами. Используйте стратегии, которые я упоминаю здесь, чтобы предотвратить это. Я считаю, что это та же проблема, но просто гуава вместо гуиса. - person Fried Hoeben; 29.03.2018
comment
Спасибо, Фрид... У меня не было на это времени... Но, думаю, теперь я должен согласиться с вашими предложениями. - person RDM; 29.03.2018