之前按下面配置,一直会报标题中错误,有的同学说改成<overlay><id></id></overlay>就可以了,然而我这里竟然错误依旧。
奇怪的是间隔了一段时间之后,现在无论哪种方式都不报错误了。
配置如下
1.
<dependency>
<groupId>cn.bsdn</groupId>
<artifactId>yandz-cn-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>${maven.compiler.encoding}</encoding>
<source>1.6</source>
<target>1.6</target>
<overlays>
<overlay>
<groupId>cn.bsdn</groupId>
<artifactId>yandz-cn-web</artifactId>
</overlay>
</overlays>
</plugin>
但是在报错时候,查看了project的properties下Deployment Assembly选项中可以看到项目yandz-cn-web,但是在Project References选项中没有看到yandz-cn-web被勾选。
目前:Deployment Assembly选项和Project References选项中都可以看到对项目yandz-cn-web的依赖。
结论:maven-war-plugin其实仍然是在原本eclipse项目依赖理论基础上实现的,只不过插件默认帮你完成了项目之间的依赖操作而已,期初的报错应该是插件下载问题导致的。
2.其它,顺便解释下下面两个属性用途
2.1)<attachClasses>true</attachClasses>在使用maven-war-plugin打包是会将classes中的文件打包成jar并发布到maven库中,生成的war和不配置该属性时一样。
2.2)<archiveClasses>true</archiveClasses>在使用maven-war-plugin打包是会将classes中的文件打包成jar不发布maven库,但会放入生成war包的lib目录中,当然classes就会为空了。
2.3) <overlay><id>yandz-cn-web</id></overlay>作用是将依赖的war类型项目中内容 生成到所打的war包中,项目中的classes文件会以jar形式引入,其它内容会合并到war目录。
3.maven插件作用觉悟
很早就知道maven有运行周期、阶段Phase、目标goal、插件plugin等概念,maven支持自定义插件开发,也已经很多插件,也用过一些插件比如生成源码包,也看到过别人写的插件源码,但一直对开发插件懵懵懂懂,主要也没有这方面的需求引起思考,刚才又好奇这个问题,到底开发那么多插件有啥用呢,于是乎又看了下网上插件入门的helloword的例子,突然明白原来自定义插件就是为了在maven执行某些命令时 做一些自己现有插件不能做到而又想做的事情,比如在用maven-war-plugin可以生成war,如果我想在生成war中额外添加一个特殊的动态文件,并且是该插件正常执行时不能产生的文件,那么就可以通过自定义插件实现了。