【问题标题】:Maven : How to filter one file with own pluginMaven:如何使用自己的插件过滤一个文件
【发布时间】:2013-11-13 21:19:34
【问题描述】:

我正在修改一些 maven3 插件,我只需要使用 pom 中已经定义的一些属性来过滤文件,从而启动整个过程。

我没有找到关于该主题的太多文档/示例,并且我的所有尝试都失败了。

第一个:

 /**
 * @component
 * @required
 * @readonly
 */
private MavenFileFilter mavenFileFilter;

然后在我的代码中:

mavenFileFilter.copyFile(tempFile, resultingFile, true, getProject(), Collections.<String> emptyList(), true, "utf-8", session);

但是什么也没发生:替换没有完成。

然后我看到了各种各样的例子

MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution(resources, outputDirectory, getProject(), "utf-8", null, nonFilteredFileExtensions, session);

但是我不知道如何将我想要的文件放在那里...资源没有具有实际内容的构造函数...

欢迎任何帮助!

最好的

编辑(更多上下文): 上下文如下:我们构建了一个部署在许多客户服务器上的 Web 应用程序。

一方面,文件夹层次结构因客户而异。

另一方面,我们有一些默认的 logback.xml 配置文件,需要对其进行过滤(以使用给定客户服务器的正确文件夹层次结构)。该文件位于一些常见项目中。如果我们愿意,我们还希望能够根据每个客户专门化这个 logback.xml。我们已将这些文件放在相应公共项目/客户项目的源文件夹中。

因此,进行打包的插件现在按依赖顺序查看每个工件,并选择第一个 logback.xml 并将其放在需要的地方。它还需要进行过滤以放置正确的文件夹。

这一切都在最后一点...

这有意义吗?有更好的办法吗?

再次感谢

【问题讨论】:

  • 问题是我需要在生命周期的后期这样做:这是一些我需要为给定上下文自定义的配置文件...
  • 现有的过滤能力还不够吗?
  • @khmarbaise 我确定他想使用现有的过滤功能,但 API 是什么以及如何使用它们?这就是这个问题的本质。 Maven API 的文档记录很差。它使得编写插件需要大量的试验和错误。我实际上正在为这个确切的问题而苦苦挣扎(这就是我来到这里的方式)。
  • 我建议看看here
  • @khmarbaise:那个链接正是我想要的。谢谢!!

标签: maven maven-plugin


【解决方案1】:

我建议看看这个:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <!-- here the phase you need -->
            <phase>validate</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${basedir}/target/extra-resources</outputDirectory>
              <resources>          
                <resource>
                  <directory>src/non-packaged-resources</directory>
                  <filtering>true</filtering>
                </resource>
              </resources>              
            </configuration>            
          </execution>
        </executions>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>

为什么你需要实现一个只在另一个生命周期阶段复制资源的插件。

【讨论】:

  • 我在问题中添加了更多上下文,希望对您有所帮助...但是,在编辑它并感谢您之后,我想到了一个新方法:在我的插件操作之后和打包之前的一个阶段所有的东西,是可能的。让我们看看 :) 再次感谢!
猜你喜欢
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 2011-11-20
  • 2012-03-16
相关资源
最近更新 更多