努力让 xspec-maven-plugin-1 工作

Struggling to get the xspec-maven-plugin-1 to work

Maven 新手...

我使用 git 克隆下载了 XSpec:

git clone https://github.com/xspec/xspec.git

我设置了合适的环境变量。 XSpec 似乎工作正常。

对于 Maven 插件,我使用的是:xspec-maven-plugin-1

为了创建 Maven 项目,我打开了一个 (Windows) 命令 window 并输入:

mvn -B archetype:generate -DgroupId=org.test.waypoints -DartifactId=waypoints -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4

这创建了一个 waypoints 文件夹和几个子文件夹。

我将 XSpec 测试 (waypoints.xspec) 放入此文件夹中:waypoints/src/test/xspec

我将我的 XSLT 程序 (waypoints.xsl) 放在这个文件夹中:waypoints/src/main/xsl

我打开 waypoints/pom.xml 并将如下所示的插件元素添加到 build/pluginManagement/plugins.

https://github.com/xspec/xspec-maven-plugin-1 上的文档说:不要忘记向您的 Saxon 许可证添加依赖项。问题 #1:如何向我的 Saxon 许可证添加依赖项?我的 Saxon 许可证位于此文件夹中:C:\SAXON\saxon-license

我不知道如何添加这种依赖性,但尽管如此,我还是坚持了下来。我在包含 pom.xml 的文件夹中打开命令 window 并输入:

mvn test

这似乎没什么用。我收到这条消息:Nothing to compile - all classes are up to date

问题 #2:在 test 命令之前,我是否应该 运行 一些其他 Maven 命令?

问题 #3:Maven 如何知道使用 XSpec 代码?

问题 #4:下面显示的插件元素看起来正确吗?

<plugin>
    <groupId>io.xspec.maven</groupId>
    <artifactId>xspec-maven-plugin</artifactId>
    <version>2.0.0</version>
    <dependencies>
        <dependency>
            <groupId>net.sf.saxon</groupId>
            <artifactId>saxon-ee</artifactId>
            <version>10.1</version>
        </dependency>
        <dependency>
            <groupId>io.xspec</groupId>
            <artifactId>xspec</artifactId>
            <version>1.6.0</version>
        </dependency>
    </dependencies>
    <configuration>
        <generateSurefireReport>true</generateSurefireReport>
        <saxonOptions></saxonOptions>
    </configuration>
    <executions>
        <execution>
            <phase>test</phase>
            <goals>
                <goal>run-xspec</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Q4 答案:

你的插件定义很好。如果在 /project/build/plugins 下,则无需添加。但是如果在/project/build/pluginManagement/plugins下,插件只是配置,没有声明。您必须在 /project/build/plugins/.

下声明它
<project ...>
  <build>
    <pluginManagement>
      <plugins>
        <!-- your code you put previously in this thread -->
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>io.xspec.maven</groupId>
        <artifactId>xspec-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

一旦插件被声明,因为它被绑定(通过 execution 元素)到 test 阶段,当 mvn 运行s 这个测试阶段时,它执行 xspec-maven-plugin.

Q3 答案:

xspec-maven-plugin,在其默认配置中,知道 xspec 文件在 src/test/xspec 下。它会查找所有匹配 *.xspec 模式的文件,以及 运行 每个文件上的 xspec 套件。

xspec-maven-plugin,通过一个依赖机制,知道从哪里得到 XSpec 实现(你在插件依赖中指定了 XSpec 版本),它会从 xspec 实现中获取 xspec 文件到 运行在 src/test/xspec.

中找到的每个 xspec 文件上的 xspec 套件

Q2 答案:

没有。 mvn test 就够了。在 运行ning xspec-maven-plugin 之前,所有绑定到 test 阶段之前的阶段的插件都会被执行。有关详细信息,请参阅 Maven Lifecycle。如果您的 /project/packagingjar,那么项目生命周期就是前面 link 中描述的生命周期。

Q1 答案:

视情况而定!

  • 我将我的 Saxon 许可证文件包装在一个 jar 文件中,并将这个 jar 文件放入我的企业工件存储库中。因此,我有一个工件 my.orga.saxon.license:ee:10.1 可以添加到我的插件依赖项中,就像您为 xspec 实现所做的那样。这使我能够避免在所有使用 Saxon EE 的项目中复制许可证文件。如果您想这样做,请参阅 Maven Install plugin or Maven deploy plugin
  • 您可以将您的许可证文件放在一个可以添加到类路径的地方。 src/main/javasrc/main/resources 是一个很好的地方。我没有测试它(上一个项目符号用于解释),但它应该可以工作。

更多...

你得到的消息,Nothing to compile... 来自 Maven Lifecycle,其中有一个 compile 阶段,其中 java 类 在 src/main/java 下找到编译。在接下来的阶段,编译位于src/test/java中的test-compile、java测试类。也许,我应该在我的插件中定义一个 xspec-compile 目标,以在 test-compile 阶段编译位于 src/test/xspec 的 xspec 文件。一切都在一个目标中完成。 XSpec 文件在 test 阶段执行,其中执行 java 单元测试。

如果您需要一个带有 XSpec 单元测试的纯 XSL Maven 项目示例,您可以查看 Matthieu Ricaud XML Utilites Project,它使用 xspec-maven-plugin,但这里使用 Saxon-HE。

抱歉,我没有使用 XSpec 和 Saxon-EE 的开源项目。

希望对您有所帮助。如果您需要更精确的信息,请随时通过私人邮件给我打电话,我会更新此主题。

克里斯托夫