建设一战,当文件已经被覆盖在Maven项目(Files got overwritten in mav

2019-06-23 14:16发布

我建立使用Maven Web应用程序项目,以及包装被设置为“战争”。 我也使用YUI压缩机的插件在webapp目录压缩JavaScript代码。 我已经设置了YUI压缩机是这样的:

<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>1.3.0</version>
    <executions>
        <execution>
        <phase>process-resources</phase>
        <goals>
            <goal>compress</goal>
        </goals>
        </execution>
    </executions>
    <configuration>
        <excludes>
        <exclude>**/ext-2.0/**/*.js</exclude>
        <exclude>**/lang/*.js</exclude>
        <exclude>**/javascripts/flot/*.js</exclude>
        <exclude>**/javascripts/jqplot/*.js</exclude>
        </excludes>
        <nosuffix>true</nosuffix>
        <force>true</force>
        <jswarn>false</jswarn>
    </configuration>
</plugin>

如果我做的:MVN工艺资源,源/主/ web应用程序将会被复制到目标/ webapp的-1.0 /目录下,javacripts被压缩。 然而,当我运行mvn安装,所有压缩JavaScript的被覆盖,显然是包装过程的副本构建WAR文件之前,从主/ web应用一次的内容。

我怎样才能解决这个问题?

Answer 1:

正如你注意到的, /src/main/webapp ,直到在封装阶段的战争插件执行目录(又名warSourceDirectory)中的内容不会被复制到项目目录进行包装。 当战争结束插件存档已建成; 来不及修改这些资源。 如果你想压缩.js文件被移动到另一个目录(外/src/main/webapp ),那么你可以做类似的下面。

为了测试,我创建了一个${basedir}/src/play目录,在这两个文件。 我使用的resource插件的例子; 你会用您需要的,只是在添加YUI压缩机的插件配置是配置<webResource>元素到你的war插件的配置,如下图所示; 在更多信息战争插件的例子 。 我的战争结束了与其他文件身在何方,我想他们。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <executions>
    <execution>
      <id>copy-resources</id>
      <phase>process-resources</phase>
      <goals><goal>copy-resources</goal></goals>
      <configuration>
        <outputDirectory>${project.build.directory}/tmpPlay</outputDirectory>
        <resources>
          <resource>
             <directory>${project.basedir}/src/play</directory>
             <includes>
                <include>**/*</include>
             </includes>
          </resource>
        </resources>
       </configuration>
    </execution>
  </executions>
</plugin>

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <executions>
    <execution>
      <id>default-war</id>
      <configuration>
        <webResources>
          <resource>
            <directory>${project.build.directory}/tmpPlay</directory>
            <targetPath>WEB-INF/yourLocationHere</targetPath>
            <includes>
              <include>**/*</include>
            </includes>
          </resource>
        </webResources>
      </configuration>
    </execution>
  </executions>
</plugin>


Answer 2:

我觉得@ user944849的答案是正确的答案,正确答案的至少一个。 该归档的另一种方法是排除Maven的战争插件配置,如修改后的JavaScript目录:

<plugin>
    <artifactId> maven-war-plugin </artifactId>
    <configuration>
        <warSourceExcludes>**/external/ dojo/**/*.js </warSourceExcludes>
    </configuration>
</plugin>

这将告诉Maven的战争插件不会从排斥目录复制,但由于修改后的JavaScript目录已经存在,战争的文件仍然包含的JavaScript目录,但与修改,在这种情况下,压缩的JavaScript代码。



Answer 3:

在执行指令,设定您的应用压缩和复制被安装阶段,这将有希望做的伎俩。 代码应该是这样的:

<executions>
    <execution>
        ....
        <phase>install</phase>
        ....
    </execution>
<executions>


Answer 4:

这里是我的解决方案,只需添加一个antrun插件,更新使用处理后的输出打包war文件,结合到封装阶段:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>package</id>
                    <phase>package</phase>
                    <configuration>
                        <target>
                            <zip basedir="${project.build.directory}/${project.build.finalName}"
                                destfile="${project.build.directory}/${project.build.finalName}.war"
                                update="true">
                            </zip>
                        </target>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>


文章来源: Files got overwritten in maven project when building a war