与 spotify maven 插件和 docker 一起使用时出现 Fitnesse 错误

Fitnesse error when used with spotify maven plugin and docker

我正在使用 spotify maven 插件创建健身 docker 图像并 运行 它在容器上。我能够在不使用 spotify maven 插件和 docker 的情况下在本地成功地启动 fitnesse 和 运行 测试,但是当我使用它们时却不行。 当我启动 fitnesse 时出现以下错误 Error message

这是 FrontPage fitnesse wiki 的内容,它通常根据 http://blog.xebia.com/fitnesse-and-dependency-management-with-maven/

解决依赖关系
!contents

!define 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>

我认为您的问题可能是您没有在 docker 映像中包含 Maven 设置和存储库,因此 !pomFile 在您的 docker 映像中不起作用。

话虽如此:您可能不需要它,因为您捆绑了所有 classes 和依赖项(至少我假设 'shade plugin' 为您做了什么)。所以你可以禁用 'maven class 路径插件,以防止你现在遇到的问题。禁用 maven classpath 插件可以通过将 -Dfitnesse.wikitext.widgets.MavenClasspathSymbolType.Disable=true 添加到 Java 命令行开始 FitNesse in docker 来完成(或者当然是从 wiki 页面中删除该行,但这会影响您在当地的工作方式)。

但我不知道你的测试是否会立即生效,或者你必须做一些额外的事情来确保生成的 'final jar' 位于 [=21= 的 class 路径上] 实际测试开始后启动的过程(但您可以通过 运行 删除 !pomFile 并从 shade 插件创建的 jar 开始在本地尝试)。

Fitnesse 无法解析 pom.xml,因为 docker 中未设置 Maven。在我的 fitnesse wiki 中,我没有使用 !pomFile pom.xml,而是使用了 !path path/to/jars/*.jar

虽然上面的错误消失了,maven-shade-plugin 无法解决所有依赖关系,如 spring-test .

我必须将 maven-dependency-plugin 添加到 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 docker-maven-plugin

将它们移动到 docker
<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>