Maven包含另一个模块中的文件内容

Roy*_*yce 6 maven-2 template-engine

我有一个看起来像这样的maven应用程序

application_name/
    module1
        src/main/resources
            file_snippet.xml
    module2
        src/main/resources
            file_snippet.xml
    module3
        src/main/resources
            file.xml
Run Code Online (Sandbox Code Playgroud)

file.xml应该是这样的

<workflow>
  <action>
  <%= module1/src/main/resources/file_snippet.xml %>
  </action>

  <action>
  <%= module2/src/main/resources/file_snippet.xml %>
  </action>

</workflow>
Run Code Online (Sandbox Code Playgroud)

我想在构建之前将module2和module2中的file_snippet.xml的内容包含到module3的file.xml中.这在maven有可能吗?我可以使用某种模板语言或插件吗?

jwi*_*ndy 1

我也想了解 Maven 的一些模板引擎,但也许你一开始并不需要 Maven。

有一种方法可以在 xml 文件中包含另一个 xml 文件: http://bobcat.webappcabaret.net/javachina/faq/xml_01.htm#dtd_Q408

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
    <!ENTITY xmlfrag SYSTEM "xmlfrag.txt" >

    <!ELEMENT root (tag1, tag2) >   
    <!ELEMENT tag1 (childtag) >
    <!ELEMENT tag2 (childtag) >
    <!ELEMENT childtag (#PCDATA) >
    <!ATTLIST childtag att NMTOKEN #REQUIRED >
]>
<root>
  &xmlfrag;
</root>

xmlfrag.txt(well formed xml fragment without xml decl)

<tag1>
  <childtag att="child1">text1</childtag>
</tag1>
<tag2>
  <childtag att="child2">text2</childtag>
</tag2>
Run Code Online (Sandbox Code Playgroud)

否则,为了合并Maven 中的依赖项/模块之间的 xml 资源,您可以使用 maven-shade-plugin (使用资源转换器)。

在你的情况下:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer">
                  <resource>file.xml</resource>
                  <!-- Add this to enable loading of DTDs
                  <ignoreDtd>false</ignoreDtd>
                  -->
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
Run Code Online (Sandbox Code Playgroud)

将 module1/src/main/resources/file.xml 和 module2/src/main/resources/file.xml (取决于依赖项)合并到 module3/src/main/resources/file.xml 中。