maven的XML格式化程序插件

时间:2013-10-15 13:18:47

标签: maven

使用maven格式化单个XML文件的最简单方法是什么,即我正在寻找一个使XML文件具有人类可读性的maven插件。我已经尝试了http://code.google.com/p/xml-formatter/但是由于某种原因,我正在努力让它继续下去,而且我认为像这样的东西会成为已经在Maven Central上的插件的一部分,或者我错了吗?是否有可以委托的蚂蚁任务?

修改

如果现在尝试https://github.com/benalexau/xml-formatter,它似乎是上面提到的xml-formatter插件的最新版本。我通过使用以下方法将其部署到我的本地nexus存储库来实现它:

  • https://github.com/benalexau/xml-formatter
  • 下载了ZIP文件
  • 在zip:// releases / org / technicalsoftwareconfiurationmanagement / maven-plugin / tscm-maven-plugin / version-number /
  • 中提取.jar和.pom文件
  • 使用以下maven命令将插件上传到我的nexus repo(在Linux上):
    mvn deploy:deploy-file \
    -Durl="http://my/nexus/repo" \
    -DrepositoryId="3rd party" \
    -Dfile=tscm-maven-plugin-2.1.0.20111230154050.jar \
    -Dpackaging=maven-plugin \
    -DpomFile=tscm-maven-plugin-2.1.0.20111230154050.pom
    
  • 将以下内容添加到我的项目pom文件中:
    <plugin>
       <groupId>org.technicalsoftwareconfigurationmanagement.maven-plugin</groupId>
       <artifactId>tscm-maven-plugin</artifactId>
       <version>2.1.0.20111230154050</version>
       <configuration>
        <includes>
            <include>my-xml-file.xml</include>
        </includes>
        <excludes>
            <exclude>/target/</exclude>
        </excludes>
      </configuration>
      <executions>
        <execution>
            <phase>test</phase>
            <goals>
                <goal>xmlFormatter</goal>
            </goals>
        </execution>
      </executions>
    </plugin>
  • 运行
    mvn tscm:xmlFormatter
    

然而......这似乎通过替换“&lt;”来破坏我的soap-ui xml文件和“&gt;”在CDATA部分中&amp; lt;和&amp; gt;即插件并不适用于更复杂的用例。

3 个答案:

答案 0 :(得分:2)

您可以调整我的cleanpom-maven-plugin来做您需要的事情,虽然它目前不是为此而设计的,但您可以进行就地清理。我刚刚创建了一个可以显示这个的单元测试。

你需要一个可以清理的XSLT并放入JAR文件的META-INF里面

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xalan="http://xml.apache.org/xslt"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xsl:output method="xml" indent="yes" encoding="UTF-8"
                xalan:indent-amount="4" />
    <xsl:strip-space elements="*" />

<!-- default copy -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>
<xsl:template match="/">
    <xsl:text>&#xa;</xsl:text>
    <xsl:if test="comment()">
        <xsl:apply-templates select="comment()" />
        <xsl:text>&#xa;</xsl:text>
    </xsl:if>
    <xsl:apply-templates select="*" />
</xsl:template>
</xsl:stylesheet>

然后添加以下插件

<plugin>
<groupId>net.trajano.mojo</groupId>
<artifactId>cleanpom-maven-plugin</artifactId>
<version>1.0.6</version>
<executions>
    <execution>
        <id>clean-web-xml</id>
        <goals>
            <goal>clean</goal>
        </goals>
        <configuration>
            <pomFile>src/main/webapp/WEB-INF/web.xml</pomFile>
            <xsltFileList>clean.xslt</xsltFileList>
        </configuration>
    </execution>
</executions>
<dependencies>
   <dependency>
      <groupId>group</groupId>
      <artifactId>cleanxslt</artifactId>
   </dependency>
</dependencies>

有点kludgey,也许我将来会为这个用例创建一个特定的,因为Eclipse不允许在项目级别保存时设置XML代码样式。

答案 1 :(得分:0)

使用 xml-maven-plugin ,在http://mojo.codehaus.org/xml-maven-plugin/transformation.html上查看

您可以使用xsl:stylesheet和xsl:transform

将XSLT转换应用于XML文件
<stylesheet>src/main/stylesheet.xsl</stylesheet>

答案 2 :(得分:0)

使用 xml-format-maven-plugin ,可从Maven Central和documented here获取。当前版本正确处理复杂的XML文件,包括concatMap

(免责声明:我是原始提问者提及的CDATA的作者,以及xml-formatter继承者