我目前正在使用maven 3.x和maven-war-plugin。对于开发人员构建,我希望能够使用war:exploaded目标,但只能复制已更改的资源。有没有办法做到这一点?
我一直在查看文档并且无法在当前版本中找到这样做的方法,但过去曾经(在旧的maven 1.x版本中)属性maven.war.resources .overwrite,允许这样做。
感谢。
答案 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目录中替换重新编译的文件。