【问题标题】:How does IntelliJ's Maven filtering support work?IntelliJ 的 Maven 过滤支持如何工作?
【发布时间】:2012-04-05 21:38:29
【问题描述】:

我注意到,当您将 Maven 项目配置为使用属性过滤时,属性过滤似乎在非 Maven IntelliJ“制作”期间也有效。这意味着 Jetty/Tomcat/GWT/Glassfish 的 IntelliJ 运行配置仍将支持您的 maven 资源过滤。

所以如果我把它添加到我的pom.xml:

 <build>
     <resources>
         <resource>
             <directory>src/main/resources</directory>
             <filtering>true</filtering>
             <includes>
                 <include>**/*.properties</include>
                 <include>**/persistence.xml</include>
             </includes>
         </resource> ....

它应该在任何 intellij 运行配置开始之前过滤我的 properties 和 peristence.xml 文件中的任何属性。这对于交换 JDBC 引用或文件系统参数非常有用。

我遇到的唯一问题是 IntelliJ 似乎只支持 src/main/resources 中的过滤,即使我将 pom.xml 更改为其他目录的第二个条目(即:src/integrationtest/resources)。

这一切似乎都是“自动的”。那么它是如何工作的,我可以在哪里(如果有的话)配置它?

【问题讨论】:

    标签: maven intellij-idea


    【解决方案1】:

    IntelliJ IDEA 的 Make 功能能够过滤 Maven 资源。但是,IntelliJ IDEA 尚不支持过滤 Web 资源。

    来源:http://www.jetbrains.com/idea/webhelp/maven.html#compile
    虽然在整个 intellij webhelp 中没有关于这种支持的更多细节,所以我想它应该像 maven 的 process-resources 阶段一样工作。

    您遇到的问题可能是由于目录src/integrationtest/resources 不遵循 maven 约定。 如果你这样做,也许它会起作用:

    • 让它src/test/resources/integrationtest/

    • 配置 maven 以尊重 src/integrationtest 作为测试源(但如果 integrationtest 不是众所周知的约定,它将违反 maven 的 COC 规则)

    • 如果您想强调integrationtest 的隔离,请使其成为另一个maven(子)模块

    至于过滤与src/main/resources 不同的目录:过滤src/main/webapp/META-INF 对我来说是开箱即用的。
    (Maven 3.0.4,Intellij 12.1.4)

    【讨论】:

      【解决方案2】:

      好消息,该问题似乎将在 13.1 中修复

      http://youtrack.jetbrains.com/issue/IDEA-25934

      编辑:对不起,如果不够清楚,错误案例只是标记为“已修复”,没有进一步的解释...... 但我在 13.1 EAP 版本(内部版本 134.1445)中进行了测试,虽然以前 IntelliJ 会覆盖资源,但它现在保留了 Maven 过滤的 Web 资源。

      【讨论】:

      • 问题 IDEA-25934 中的解决方法通过添加 WEB-INF 对我有用
      【解决方案3】:

      Intellij(我使用的是 14.1)确实允许您在工件构建期间将自定义 Ant 任务定义为预处理/后处理。

      转到项目结构 -> 工件 -> {选择工件} -> {预处理|后处理}选项卡。

      因此,例如,我可以使用以下简单任务来模拟资源过滤,以防开箱即用:

      <target name="filter" depends="clean">
          <copy todir="${maven.build.dir}/${maven.build.finalName}">
              <fileset dir="${maven.build.resourceDir.0}"/>
              <filterset begintoken="${" endtoken="}">
                  <filter token="project.version" value="${project.version}"/>
              </filterset>
          </copy>
      </target>
      

      【讨论】:

        【解决方案4】:

        不要忘记定义默认配置文件

         <profiles>
            <profile>
                <id>development</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <properties>
                    ...
                </properties>
            </profile>
         </profiles>
        

        【讨论】:

          猜你喜欢
          • 2021-12-25
          • 1970-01-01
          • 1970-01-01
          • 2011-07-31
          • 1970-01-01
          • 1970-01-01
          • 2011-05-29
          • 2012-07-23
          • 1970-01-01
          相关资源
          最近更新 更多