- 首先贴出我的MAVEN的setting.xml文件,嗯,我也怕忘了下次再怎么去配置。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
<!-- 自动打包部署到tomcat,用户名和密码对应tomcat/conf/tomcat-users.xml的配置 -->
<server>
<id>tomcat7</id>
<username>manager</username>
<password>cc830905</password>
</server>
</servers>
<mirrors>
</mirrors>
<profiles>
<!-- 配置maven创建工程时使用的JDK编译版本 -->
<profile>
<id>jdk17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
<profile>
<id>dev</id>
<repositories>
<repository>
<id>local-nexus</id>
<url>http://cc.thiscc.com:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>people.apache.snapshots</id>
<url>http://repository.apache.org/content/groups/snapshots-group/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
</settings>
使用eclipse创建maven web工程的步骤:
- new–>Project…–>Maven Project
- 配置项目运行容器tomcat
问题:经常创建maven项目后,pom.xml头会报诸如:
Description Resource Path Location Type Could not calculate build plan: Failure to transfer xxx.xxx...
的错误。
比如:
- 原因:
- 使用maven下载jar包的过程中,很容易因为各种原因(网速慢、断网)导致jar包下载不下来,出现很多
.lastUpdated
文件。因为这些文件的存在,导致jar包没能正确下载下来,所以maven找不到相关的jar包。 - 解决办法:去本地仓库目录repository删除
.lastUpdated
后缀的文件。这里提供两个平台批量删除的脚本:
- 使用maven下载jar包的过程中,很容易因为各种原因(网速慢、断网)导致jar包下载不下来,出现很多
- 原因:
for windows平台:
cd %userprofile%\.m2\repository
for /r %i in (*.lastUpdated) do del %i
for linux平台
find ~/.m2 -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;
删除完成之后,在右键项目工程,选择Maven
–>Update Project...
更新一下即可。
- 问题: 在Eclipse中新建了一个Maven工程, 默认生成的JDK版本是1.5,然后更改JDK版本为1.7, 结果每次使用Maven > Update project的时候JDK版本都恢复成1.5。
- 原因:
- 这是Maven已知的一个特性。除非在你的POM文件中显示的指定一个版本,否则会使用编译器默认的source/target版本1.5。主要还是在于Eclipse中Maven的集成方式起到了关键作用, 它会从POM文件中生成项目的.project,.classpath以及.settings, 因此除非POM文件指定了正确的JDK版本, 否则你每次更新项目配置的时候它都会重置到1.5版本。
- 解决办法: 在项目的pom.xml文件中增加如下配置:
- 原因:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source> <!-- 源代码使用的开发版本 -->
<target>1.7</target> <!-- 需要生成的目标class文件的编译版本 -->
<!-- 一般而言,target与source是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中需要没有使用低版本jdk中不支持的语法),会存在target不同于source的情况 -->
<encoding>UTF8</encoding>
<!--windows默认使用GBK编码,java项目经常编码为utf8,也需要在compiler插件中指出,否则中文乱码可能会出现编译错误-->
</configuration>
</plugin>
</plugins>
</build>
参考官方示例:http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
技巧:上面的方法每次都要去生成的工程中去修改pom,项目多的话修改起来很麻烦,这里有个一劳永逸的办法,修改eclipse 创建maven项目设置默认jdk版本:
- 只需要在maven的setting.xml文件中 的 profiles 节点 加入如下代码片段:
<profile>
<id>jdk17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
官方解释:http://maven.apache.org/plugins/maven-compiler-plugin/index.html
- **问题:使用Maven > Update project的后项目编码UTF-8被改成GBK的问题。
- 原因:当在DOS下执行mvn compile命令时,默认使用的是系统的GBK格式编码。
- 解决办法:在pom.xml中指定编码。
<properties>
<!-- 文件拷贝时的编码 -->
<project.build.sourceencoding>UTF-8</project.build.sourceencoding>
<project.reporting.outputencoding>UTF-8</project.reporting.outputencoding>
<!-- 编译时的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
- 技巧:创建支持Java Servlet3.0的Maven Webapp项目
- 首先明确一个概念:dynamic web module version与tomcat以及JDK之间的对应关系
dynamic web module version | 对应的tomcat | 对应的J2EE |
---|---|---|
2.3 | 未知 | JAVA1.3以上 |
2.4 | tomcat5.5以上 | JAVA1.3以上 |
2.5 | tomcat6以上 | JAVA1.5以上 |
3.0 | tomcat7以上 | JAVA1.6以上 |
3.1 | tomcat8以上 | JAVA1.7以上 |
这里我也不是很懂,找了半天资料都没搞明白这什么玩意o(╯□╰)o,我的理解大概就是如果你用的dynamic web module是3.0的,那么你把这个项目部署在tomcat6里面去运行是不行滴,用1.7版本一下的JDK也是不行滴,嗯,大概就是这样。理解错了欢迎给我指正。
这个技巧是由一个问题引出来的:那就是当你右键eclipse的工程,选择属性,再选择Project Facets里面中选择Dynamic Web Module,想修改这个Module版本的时候,提示你:
Cannot change version of project facet Dynamic Web Module to 3.0
就是死活不让修改!那我们只能暴力执法了→_→,去修改配置文件:
另外这里还有另一种解决方式,我就不赘述了,英语比较好的去参考一下歪果仁的思路—>传送门
到这里还不算完,还有一个地方需要我们去修改一下,那就是web.xml文件。
当你修改Dynamic Web Module后,Update Project…后就会看到上面这样子的图。这是web.xml声明中的版本和Dynamic Web Module不一致造成的,那么我们就来修改一下web.xml这个声明:
方便伸手党copy的代码在下面:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>xcrm</display-name>
</web-app>
再次右键工程–>Maven–>Update Project…,大功告成,一个没有红叉叉的maven web项目就这样完成了。
哎,另一种方式也记录一下吧,就是上面传送门歪果仁用的方法,照顾一下英语和我一样渣的童鞋。。最主要的区别就是,这种方式可以直接在eclipse里面完成,而不用重启eclipse。进入正题:
- 创建maven project,没什么好说的,大把的教程了。
右键工程–>properties–>project facets,此时如下:
我们要做的就是先把Dynamic Web Module的勾去掉,再Apply。此时我们再去把它勾上,现在你就可以任意选择版本了,如下:
点击Apply之后,此时我们会发现,在工程目录里面多了个WebContent目录。把它自动给我们添加的WebContent目录删除掉,在右键工程–>properties–>Deployment Assembly中该删的删了,该添加的加上,最终下面这张图一样就差不多了。
这里配置的其实就是项目部署的目录,很明显,我们要把src/main/java和src/main/resource里面的文件要发布到项目的WEB-INF/classes目录里面,src/main/webapp下的文件发布到项目的/目录下面,当然maven Dependencies里面自动下载下来的jar包就要部署到项目的WEB-INF/lib目录下面了。最后,同样的还得修改一下web.xml的声明和Dynamic Web Module版本对应,同上。修改完后别忘了右键工程–>Maven–>Update Project… 嗯!The END!
如何下载maven中依赖包的源码?
有些时候,遇到程序莫名其妙的错误的时候,可能需要去看源码找问题,如果不是maven工程,你可能需要一个一个的去下载jar包所对应的源码,然后再通过link关联起来,既麻烦也不优雅。但是如果是maven工程,这一切都好办,只要一个命令mvn dependency:sources
就能解决。
右键工程–>Run As–>Maven build,在Goals中输入dependency:sources
,再点击Run,然后等它下载完就行了。
so easy!