普通项目转为maven项目及相关操作说明
如图,一般的项目大致包括三类路径:src,源码路径;test,单元测试路径;lib第三方类包路径。
示例项目中,BaseDao类依赖于mysql-connector-java-5.1.15-bin.jar。SimTest类为依赖JUnit4的单元测试类。
在eclipse中邮件单击项目选择Maven->Enable Dependecy Management。如下图:
然后根据提示,设定maven项目信息。
之后生成的pom.xml文件内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.sogougroupId>
<artifactId>example.NormalToMavenartifactId>
<version>0.0.1-SNAPSHOTversion>
project>
为了能够正确下载依赖的第三方jar包,需要在pom.xml中配置我们的资源库。添加如下配置:
<repositories>
<repository>
<id>sogou.repoid>
<url>
http://***/nexus/content/groups/public
url>
<name>Sogou Repositoryname>
repository>
<repository>
<id>sogou.repo.oldid>
<url>
http://***/nexus/content/groups/public
url>
<name>Old Sogou Repositoryname>
repository>
repositories>
为了能将项目的jar包上传到我们的资源库并被其他maven项目依赖,需要在pom.xml中配置上传资源库。添加如下配置:
<distributionManagement>
<repository>
<id>sogou-wd-releasesid>
<name>Sogou Release Distribution Repositoryname>
<url>
http://***/nexus/content/repositories/Release
url>
repository>
<snapshotRepository>
<id>sogou-wd-snapshotid>
<name>Sogou Snapshot Repositoryname>
<url>
http://***/nexus/content/repositories/snapshots
url>
snapshotRepository>
distributionManagement>
为了保证项目的jar包能正确上传,还需要确定本地maven的配置文件settings.xml中有对应上传资源库的用户名和密码。其配置如下:
<servers>
<server>
<id>sogou-wd-releasesid>
<username>你的用户名username>
<password>你的密码password>
server>
<server>
<id>sogou-wd-snapshotid>
<username>你的用户名username>
<password>你的密码password>
server>
servers>
其中id要与之前配置的上传资源库id对应。默认为LDAP中的用户名(不带@及之后的用户名)和密码,如果无效可以找谭博侃申请。
此外在settings.xml中可以配置我们的资源库为mirror,以我们的资源库为所有远程资源库的镜像,加快jar包的下载。其配置如下:
<mirrors>
<mirror>
<id>nexus-sogouid>
<mirrorOf>*mirrorOf>
<url>
http://***/nexus/content/groups/public
url>
mirror>
mirrors>
当包括其他的所有配置都完成后,执行mvn clean deploy成功后,会在http://cloud.sogou-inc.com/nexus/中看到刚刚上传的jar包。如图:
以本项目为例,其配置如下:
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.16version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.10version>
<type>jartype>
<scope>testscope>
dependency>
dependencies>
如果不知道依赖的第三方jar包的配置,可在http://***/nexus/ 中搜索。如下图:
由于一般在eclipse中开发的项目路径都不符合maven默认源码和测试路径,因此要对源码路径进行配置,否则maven不会进行编译和测试。以本项目为例,其配置如下:
<build>
<testSourceDirectory>testtestSourceDirectory>
<plugins>
<plugin>
<executions>
<execution>
<id>add-sourceid>
<phase>generate-sourcesphase>
<goals>
<goal>add-sourcegoal>
goals>
<configuration>
<sources>
<source>srcsource>
sources>
configuration>
execution>
executions>
plugin>
<plugin>
<groupId>org.apahce.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<version>2.5version>
<configuration>
<testClassesDirectory>
target/classes-test
testClassesDirectory>
<testSourceDirectory>testtestSourceDirectory>
<includes>
<include>**/*.javainclude>
includes>
configuration>
plugin>
plugins>
build>
其中插件org.codehaus.mojo. build-helper-maven-plugin用于添加源码路径。testSourceDirectory和org.apahce.maven.plugins. maven-surefire-plugin用于指定测试源码路径。
<properties>
<project.build.sourceEncoding>
GBK
project.build.sourceEncoding>
<compileSource>1.6compileSource>
properties>
其中project.build.sourceEncoding代表项目中源码文件所使用的编码。compileSource代表编译版本。
Web项目与示例项目不同,一方面需要打成war包;另一方面在转换成maven项目后,打包时需要将不同文件拷贝到不同路径下,这也是我们原有的项目不符合maven web项目文件路径的标准造成的。因此,除了之上的配置外还须一下配置。
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-war-pluginartifactId>
<version>2.1-beta-1version>
<configuration>
<webXml>WebContent/WEB-INF/web.xmlwebXml>
<archive>
<addMavenDescriptor>
false
addMavenDescriptor>
archive>
<webResources>
<resource>
<directory>srcdirectory>
<includes>
<include>**/struts.xmlinclude>
includes>
<filtering>truefiltering>
<targetPath>WEB-INF/classestargetPath>
resource>
<resource>
<directory>WebContentdirectory>
<filtering>truefiltering>
<targetPath>.targetPath>
resource>
webResources>
configuration>
plugin>
其中webXml指定了web.xml文件所在的文件夹,如果插件无法找到web.xml则会打包失败。webResources表示在打包时资源文件夹需要移动到的指定目录。每个resource中directory代表资源文件原路径,可以用includes和excludes对文件进行过滤。targetPath为移动到的目录。
Web项目中,需要额外清理WebContent/WEB-INF中的内容。对此,其配置如下:
<plugin>
<artifactId>maven-clean-pluginartifactId>
<configuration>
<filesets>
<fileset>
<directory>
WebContent/WEB-INF
directory>
<includes>
<include>libinclude>
<include>classesinclude>
includes>
<followSymlinks>falsefollowSymlinks>
fileset>
filesets>
configuration>
plugin>