【问题标题】:Merge properties files with Maven assembly将属性文件与 Maven 程序集合并
【发布时间】:2011-08-01 16:23:29
【问题描述】:

maven 程序集插件有问题。

我有一个使用多个 jar 的 maven 项目。每个 jar 都包含配置文件。 在另一个项目中,我使用 maven 组装插件将所有配置组装到唯一的 jar 中。

一切正常,但不幸的是,两个文件同名,第二个文件覆盖了第一个文件。

我没有实现告诉 maven 合并两个文件而不是覆盖。

有人知道怎么做吗?

谢谢。

【问题讨论】:

    标签: java maven maven-plugin maven-assembly-plugin


    【解决方案1】:

    maven-shade-plugin 与 AppendingTransformer 结合使用应该可以满足您的需求。

    我们使用它将来自两个 zip 项目的属性文件(定义为单独的 maven 模块)合并到一个 zip 文件中。这将创建来自两个模块的文件和目录的超集,并将指定的属性文件合并在一起。我们还将要合并的模块定义为执行合并的 maven 模块的依赖项。

    这样的事情应该可以解决问题:

    <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>
            <filters>
              <filter>
                <artifact>groupname:artifactname</artifact>
                <includes>
                  <include>**/*</include>
                </includes>
              </filter>
            </filters>
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>propertyfiletomerge.properties</resource>
              </transformer>
            </transformers>
              </configuration>
            </execution>
          </executions>
        </plugin>
    

    【讨论】:

      【解决方案2】:

      这不是您要找的,但我会使用 http://maven.apache.org/plugins/maven-antrun-plugin/ 插件运行 ant concat task http://ant.apache.org/manual/Tasks/concat.html 来合并文件。我会在 prepare-package 阶段运行 maven-antrun。

      【讨论】:

      • 谢谢,这个插件很好用。我只想使用 maven 程序集,但这似乎是不可能的。
      【解决方案3】:

      根据 Skarab 的回答,这是我使用 maven-antrun-plugin 解决此问题的代码:

      <project>
      ...
      <build>
          ...
          <plugins>
              ...
              <plugin> 
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-antrun-plugin</artifactId>
                  <version>1.8</version>
                  <executions>
                      <execution>
                      <phase>prepare-package</phase>
                      <configuration>
      
                          <target>
                              <concat destfile="${project.build.directory}/setup_db.sql">
                                  <fileset file="${project.basedir}/src/main/resources/db/sql_one/*.sql" />
                                  <fileset file="${project.basedir}/src/main/resources/db/sql_another/*.sql" />
                              </concat>
                          </target>
      
                      </configuration>
                      <goals>
                          <goal>run</goal>
                      </goals>
                    </execution>
                  </executions>
              </plugin>
              ... 
          </plugins>
      </build>
      

      【讨论】:

        【解决方案4】:

        您可以尝试重命名第一个文件,然后合并这两个文件。

        这是 stackoverflow 上的一个线程,其中记录了此类文件的重命名: Renaming resources in Maven

        【讨论】:

        • 好的,我可以重命名文件,但是之后如何合并呢?如果可能的话,使用汇编插件。
        猜你喜欢
        • 1970-01-01
        • 2017-01-28
        • 1970-01-01
        • 2012-06-29
        • 2013-01-15
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 1970-01-01
        相关资源
        最近更新 更多