Maven включает содержимое файла из одного модуля в другой - PullRequest
6 голосов
/ 16 августа 2010

У меня есть приложение Maven, которое выглядит такmodule2 в файл file.xml для module3 перед сборкой.Это возможно в Maven?Есть ли какой-нибудь язык шаблонов или плагин, который я могу использовать?

Ответы [ 2 ]

2 голосов
/ 17 августа 2010

Это непросто, вам нужно реализовать две части.

  1. получить фрагменты из другого модуля
  2. собрать файл xml, используя include

для 1. Вы можете использовать зависимость : распаковать mojo:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <executions>
        <execution>
          <id>unpack</id>
          <phase>initialize</phase>
          <goals>
            <goal>unpack</goal>
          </goals>
          <configuration>
            <outputDirectory>${project.build.directory}/snippets</outputDirectory>
            <includes>snippets/*.xml</includes>
            <artifactItems>
              <artifactItem>
                <groupId>your.app</groupId>
                <artifactId>module1</artifactId>
                <version>${project.version}</version>
                <type>jar</type>
              </artifactItem>
              <artifactItem>
                <groupId>your.app</groupId>
                <artifactId>module2</artifactId>
                <version>${project.version}</version>
                <type>jar</type>
              </artifactItem>
            </artifactItems>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Теперь вы скопировали все фрагменты из module1.jar / snippets и module2.jar / snippetsк цели / фрагментам (это была самая простая часть).

Для 2. вам нужно выбрать шаблонизатор и создать основной класс для сборки вашего шаблона с ним, вероятно, используя exec: java mojo что-то вроде этого:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1</version>
    <executions>
      <execution>
        <goals>
          <goal>java</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <mainClass>com.yourcompany.YourTemplateParser</mainClass>
      <arguments>
        <argument>path/to/your/template</argument>
        <argument>path/to/the/snippets/folder</argument>
        <argument>target/path</argument>
      </arguments>
    </configuration>
  </plugin>

(Лично я склонен использовать GMaven вместо exec: java, так как вы можете писать встроенные скрипты Groovy безсоздание пользовательских классов Java)

1 голос
/ 17 августа 2010

Хотелось бы также узнать о каком-либо шаблонизаторе для 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>

иначе, для объединения XML-ресурсов между зависимостями / модулями в maven вы можете использовать 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>

для объединения module1 / src / main / resources / file.xml и module2 / src / main / resources / file.xml (зависит от зависимостей) в module3 / src / main/resources/file.xml.

...