仅复制maven-war-plugin中的修改文件

时间:2011-04-01 18:22:41

标签: plugins maven war overwrite

我目前正在使用maven 3.x和maven-war-plugin。对于开发人员构建,我希望能够使用war:exploaded目标,但只能复制已更改的资源。有没有办法做到这一点?

我一直在查看文档并且无法在当前版本中找到这样做的方法,但过去曾经(在旧的maven 1.x版本中)属性maven.war.resources .overwrite,允许这样做。

感谢。

2 个答案:

答案 0 :(得分:1)

我不知道使用maven-war-plugin做到这一点的方法,但是如果你的IDE支持它,你可以让IDE自动部署更改。例如,Web Tools Platform for Eclipse supports this feature for Tomcat。但是,如果您的构建过程很复杂或者在调用maven-war-plugin之前做了一些奇怪的事情,那么这可能不适合您。

第二种选择:如果您正在运行Linux,请设置rsync以将最近修改的文件复制到您的servlet容器中。一位同事通过让servlet容器的web应用程序目录与Eclipse项目的输出目录同步来实现这一点,并且它运行良好(只需修改代码,Eclipse将自动构建它,rsync将复制您的更改)。

答案 1 :(得分:0)

为此,我使用maven-antrun-plugin

示例:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
....
....
    <!--DJ: Settings for deploy only-->
    <!--DJ: Dir to where copy files-->
    <!--DJ: And date when build have been started, to select only modified files in the future-->
    <properties>
        <tomcat.dir.rootDir>C:\apache-tomcat-6.0.35\webapps\ROOT1</tomcat.dir.rootDir>
        <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
    </properties>
 .....
<!--Ohter dependensies here-->
 .....
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copyModifiedFilesFrom_ExplodedWAR_Dir</id>
                        <phase>install</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo message="Upload new files to dir ${tomcat.dir.rootDir} modified after date ${maven.build.timestamp} "/>
                                <copy todir="${tomcat.dir.rootDir}">
                                    <fileset dir="${project.build.directory}/${project.build.finalName}" includes="**/*">
                                        <!-- Include only recompiled files -->
                                        <date datetime="${maven.build.timestamp}" pattern="yyyy-MM-dd HH:mm:ss" when="after"/>
                                        <!-- and only *.class files -->
                                        <filename name="**/*.class"/>
                                    </fileset>
                                </copy>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
.....
.....
        </plugins>
    </build>
</project>

然后用params运行maven: mvn pom.xml编译安装org.apache.maven.plugins:maven-war-plugin:2.1-alpha-1:爆炸

结果只会重新编译已更改的文件,并且只会在tomcat webapp目录中替换重新编译的文件。