Maven开发环境的搭建,含jetty调试[简单明了]
2015-09-22 14:50 chen.simon 阅读(1994) 评论(0) 收藏 举报之前的一片老文,搬过来。
1. Maven的开发环境需要哪些部件
a) Maven。
去http://maven.apache.org/ 下载。将其bin目录加入进系统PATH。测试方法:用命令mvn –version。

b) m2eclipse插件(可选)。
如果你习惯命令行的方式用maven,可以忽略。在线安装的site为http://download.eclipse.org/technology/m2e/releases/1.4 如果你在安装插件过程中因某些原因导致下载或安装失败,请寻找安装了m2eclipse的eclipse包。一般来讲安装m2eclipse插件的时候,会需要依赖一些其他的插件,然而部分这些被依赖的插件,又恰巧会不幸下载失败,导致了m2eclipse插件安装的时候失败的可能性比较大。所以建议全程FQ。
c) 私服。
这里以nexus为例子。
i. 为什么要私服
1. 针对项目组不能直接连接外网或者不能直接从外网下载jar的情况,私服可以充当一个代理的角色。
2. 部分你所依赖的jar因为某些原因不在中央仓库。比如oracle的JDBC驱动就因版权问题不在中央仓库。所以你要自己将ODBC维护在你的私服上。
3. 项目组内多小组使用maven开发,小组之间的jar又存在依赖关系。私服可以用来发布小组的jar提供给其他小组依赖。
ii. 怎么部署nexus
1. 去http://download.sonatype.com/nexus/oss/nexus-2.8.0-05-bundle.zip 下载。如无法下载,请去http://www.sonatype.org/nexus/go 寻找新的下载链接。如果你有tomcat服务器可以直接下载他的war来部署。
2. 注意:目前的nexus新版本需要JDK7+。第一次使用需要安装: 去nexus-2.6.0-05-bundle\nexus-2.6.0-05\bin目录下 nexus.bat install(注意如果是win7用户,需要用管理员方式启动cmd。否则权限不够,下同)
3. 启动 nexus.bat start
4. 需要修改端口号的:修改conf/ nexus.properties文件中application-port字段即可。如果是war包部署的,直接修改tomcat的端口号。Orz.
5. 访问http://localhost:8081/nexus 管理员的用户名和密码是 admin/admin123
2. Maven工程的创建及目录结构的介绍
a) 使用之前先配置eclipse中的maven插件
Window/Preferences/Maven/Installations add 你自己安装的maven,不要用插件自带的。继续修改User Settings,选择你自己maven的conf目录下的settings.xml文件。
b) 修改settings文件。
就在a步骤中配置settings文件路径的地方,有open file,这样就在eclipse中打开了settings.xml文件,找到mirrors标签,加上镜像配置,修改后类似下面所示:
<mirrors> <mirror> <id>internal_repo</id> <name>Internal Repo Manager</name> <url>http://localhost:8081/nexus/content/groups/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
Localhost就是你部署nexus的私服的地址,根据自己的实际情况,自行修改。
c) 创建工程
使用eclipse的向导new/Maven project/next/next/填写GroupId(例如org.simonme),artifact ID 如demo1,package 如org.simonme.demo1,finish。
d) 增加依赖的jar
比如以开发者需要依赖apache的common lang3。用google搜索关键字maven apache common lang,即可以找到 http://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.0 这个链接,进去查看,将maven页签下的依赖信息复制下来直接贴到工程的pom.xml dependencies中。此时观看工程左边的maven依赖库就能看common lang已经被自动加入进工程的classpath中。如下图:
package org.simonme.demo1; import org.apache.commons.lang3.StringUtils; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); System.out.println(StringUtils.isEmpty("")); } }
没问题能正常运行。
e) 在工程上右击, Run as/Maven test
这样可以将整个工程编译并运行单元测试。
f) 如果要创建一个web工程
修改pom.xml的jar成war
g) 对工程打包
在命令行中,去工程的目录下,mvn clean package。还可以跳过单元测试进行打包,加上-Dmaven.test.skip=true即可。
3. 在私服上上传jar
这种情况主要针对中央仓库没有你要的jar。
去http://localhost:8081/nexus admin登陆后,点击左边的Repositories,选择右上3rd party仓库,不要选其他仓库,选择右下的Artifact Upload,GAV Definition: 选择From POM,选择你要上传jar的pom文件(如果你没有,可以去网上搜索),上传你的jar。
4. 关联source和doc
当你在写代码的时候需要看哪个类的代码的时候,f3以后,代码jar会被自动下载和关联上来,方便的很。(第一次按,会有点慢,注意eclipse的右下角,Download source…)
如果maven没有自动下载源码jar或者javadoc jar:
先检查是否在首选项中开启了这个功能
若是还是下载不了的。可以尝试下面这个办法:
那就去你的本地仓库 删除.lastUpdated结尾的文件!!
本地仓库我用的是默认的C:\Users\chenxiaguang\.m2\repository
然后执行下面的命令
mvn dependency:resolve -Dclassifier=javadoc -U
mvn dependency:resolve -Dclassifier=source -U
有时候这个办法也不行,可以重启eclipse后依靠m2eclipse的自动source jar的功能试试。
这个问题我目前还没时间去彻底调查清楚。
5. 用jetty调试工程
参见 http://hi.baidu.com/yyjt1987/item/f55a2ab1538cc8d184dd79ad 图文并茂,经验证可用。
百度空间关闭了,上面的链接用不了,重新贴一个写的比较详细的,图文并茂的maven工程开启jetty调试 http://czj4451.iteye.com/blog/1942437
6. eclipse中jar不能自动下载问题
在eclipse中创建了新的maven工程后,修改pom增加需要依赖的jar,在增加jar依赖时,经常出现jar包不能自动下载,导致编译出错。
解决办法:
在命令行执行mvn clean install
然后在eclipse中右击工程maven/update project
7. war包的问题
在pom文件中增加war插件依赖
<build> <filters> <!-- 过滤文件,通常是一个属性文件(名值对的形式) --> <!-- <filter>src/main/webapp/META-INF/auto-config.properties</filter> --> <!-- <filter>${user.home}/antx.properties</filter> --> </filters> <finalName>hibernate_demo</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <!-- 打包之前过滤掉不想要被打进 .war包的jar,注意:这个地方,本来路径应该是 WEB-INF/lib/anaalyzer-2.0.4.jar,但是经过多次试验,不能这样,至于咋回事儿,搞不清楚。。经多方查证均无结果 暂且这样吧,虽然显得很丑陋,但是总能解决问题吧 --> <warSourceExcludes>*/lib/analyzer-2.0.4.jar</warSourceExcludes> <webResources> <resource> <!-- 元配置文件的目录,相对于pom.xml文件的路径 --> <directory>src/main/webapp/WEB-INF</directory> <!-- 是否过滤文件,也就是是否启动auto-config的功能 --> <filtering>true</filtering> <!-- 目标路径 --> <targetPath>WEB-INF</targetPath> </resource> </webResources> </configuration> </plugin> </plugins> </build>
8.Maven项目编译后classes文件中没有.xml问题
参见 http://www.cnblogs.com/wbb2109/p/3999247.html
在pom的build标签内加一段配置即可
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources>
其实出现这个问题是由于不规范造成的,按maven的目录规划,xml属于资源文件,需要将其放到resource下,这样的mvn在编译的时候会自动将其copy到clasess中
当你按规范的去放置文件后,就需要将上面的resources配置去掉了。
9. 添加只用于测试期或者编译期的jar
有时候我们需要添加只用于编译期的jar,比如servlet的jar
或者只用于测试的比如 junit的
怎么做,用scope就可以了
<!-- 添加Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
* compile,缺省值,适用于所有阶段,会随着项目一起发布。
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
10. 打出来的war包中的classes中没有文件
1) 检查src/main下是否有java类或者资源文件,打war包时,mvn是不会将test下的类或者资源打进war包的!!
11. 打包时跳过单元测试
mvn package -Dmaven.test.skip=true
12. 打包时在命令行中指定编译用的JDK版本
mvn package -Dmaven.compiler.source=1.8 -Dmaven.compiler.target=1.8
13. 带上依赖jar的打包
1 <build> 2 <plugins> 3 <plugin> 4 <groupId>org.apache.maven.plugins</groupId> 5 <artifactId>maven-assembly-plugin</artifactId> 6 <version>2.4</version> 7 <configuration> 8 <finalName>TestLegionStore</finalName> 9 <appendAssemblyId>false</appendAssemblyId> 10 <descriptorRefs> 11 <descriptorRef>jar-with-dependencies</descriptorRef> <!-- 内置配置:这里使用的是jar-with-dependencies --> 12 </descriptorRefs> 13 <archive> 14 <manifest> 15 <mainClass>com.ss.middleware.TestLegionStore</mainClass> 16 </manifest> 17 </archive> 18 </configuration> 19 <executions> 20 <execution> 21 <phase>package</phase> 22 <goals> 23 <goal>single</goal> 24 </goals> 25 </execution> 26 </executions> 27 </plugin> 28 29 </plugins> 30 </build>
14. 在POM中指定编译用的JDK版本
1 <build> 2 <plugins> 3 <!-- 指定jdk版本 --> 4 <plugin> 5 <groupId>org.apache.maven.plugins</groupId> 6 <artifactId>maven-compiler-plugin</artifactId> 7 <version>3.1</version> 8 <configuration> 9 <!-- 源码的编译器版本 --> 10 <source>1.7</source> 11 <!-- class的编译器版本 --> 12 <target>1.7</target> 13 <encoding>UTF-8</encoding> 14 </configuration> 15 </plugin> 16 </plugins> 17 </build>



浙公网安备 33010602011771号