环境:jdk1.8 + EclipseMars + Maven3.3.3
一、新建Maven项目:
首先,在你所要新建Maven项目的工作空间下新建一个空文件夹,文件夹名字即为Maven项目的名字(注:如果
不提前建文件夹的话,Maven项目就会建在选中的表空间文件夹中);
其次,在Eclipse左侧Project Explorer窗口中,按下面图片进行操作;
1、
2、
注:①:Packing有三个选项:jar,本地J2EE项目;pom,依赖项目;war,Web项目。
3、Maven项目建好后,在pom.xml文件中的<packaging>war</packaging>这一行报“web.xml is missing and<failOnMissingWebXml> is set to true”错误,这是因为新建Maven项目时定义为web项目,但是没有web.xml文件,新建一个就可以了。
解决办法:右击项目 ——> Java EE Tools ——> Generate Deployment Descriptor Stub,系统会在src/main/webapp/WEB_INF文件加下创建web.xml文件。
这样,一个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">
<!-- 声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不
可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也
是由此生成,如com.xxx生成的相对路径为:/com/xxx -->
<groupId>com.xxx</groupId>
<!-- 构件的标识符,它和groupID一起唯一标识一个构件。实际对应项目名称,就是项目根目录的名称。
构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:jars,源码,二进制发布和wars等 -->
<artifactId>SmartPid</artifactId>
<!-- 项目当前版本,格式为:主版本、次版本、增量版本、限定版本号 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 项目产生的构件类型,例如jar、war、pom。插件可以创建他们自己的构件类型,所以前面列的不
是全部构件类型 -->
<packaging>war</packaging>
<!-- 项目的名称,Maven产生的文档用 -->
<name>SmartPid</name>
<!-- 项目主页的URL,Maven产生的文档用 -->
<url>http://maven.apache.org</url>
<!-- 自定义标签管理(可在其内自定义标签名、值,用法同于el表达式:${标签名}得到其值),
常用于集中定义依赖版本号 -->
<properties>
<!-- 全局属性:源码编码为utf-8 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.0.2.RELEASE</spring.version>
<slf4j.version>1.7.5</slf4j.version>
<jackson.version>2.6.1</jackson.version>
<jdk.version>1.8</jdk.version>
<guava.version>18.0</guava.version>
<cxf.version>3.1.2</cxf.version>
</properties>
<!-- 项目引入插件所需要的额外依赖,通俗说就是Maven坐标 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- scope:管理部署(可以使用5个值:
compile:缺省值,适用于所有阶段,会随着项目一起发布。
provided:类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
runtime:只在运行时使用,如JDBC驱动,适用运行和测试阶段。
test:只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system:类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。) -->
<scope>test</scope>
</dependency>
</dependencies>
<!-- 发现依赖和扩展的远程仓库列表 -->
<repositories>
<repository>
<id>nexus</id>
<url>http://ip:port/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 发现插件的远程仓库列表,这些插件用于构建和报表 -->
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://192.168.1.25:8082/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<!-- 打包(专业叫构建)项目需要的信息 -->
<build>
<!-- 产生的构件的文件名,默认值是${artifactId}-${version} -->
<finalName>SmartPid</finalName>
<!-- 使用的插件列表 -->
<plugins>
<!-- 指定使用的插件 -->
<!-- 项目编译插件 -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<!-- 配置该plugin期望得到的properties -->
<configuration>
<!-- 源代码编译版本 -->
<source>${jdk.version}</source>
<!-- 目标平台编译版本 -->
<target>${jdk.version}</target>
</configuration>
</plugin>
<!-- Maven打war包插件,也可打jar包,插件名为:maven-jar-plugin -->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<includeEmptyDirectories>true</includeEmptyDirectories>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<warName>SmartPid</warName>
</configuration>
</plugin>
<!-- Maven自定义打包工具 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
<!-- 使用cxf的Maven插件,解析webService接口 -->
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<!-- 在构建生命周期中执行一组目标的配置,每个目标可能有不同的配置 -->
<executions>
<!-- execution元素包含了插件执行需要的信息 -->
<execution>
<!-- 执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标 -->
<id>generate-sources</id>
<!-- 绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 -->
<phase>generate-sources</phase>
<!-- 配置的执行目标 -->
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/KernelService.wsdl</wsdl>
<extraargs>
<extraarg>-mark-generated</extraarg>
<extraarg>-asyncMethods</extraarg>
<extraarg>-p</extraarg>
<extraarg>com.MMSHGIS.client.KernelService</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
----------------------------------------------本人水平有限,关于pom.xml的标签理解可能有不对的地方,如果大家发现一定要提出来,非常感谢!-------------------------------------------------
参考文章:http://www.cnblogs.com/dennyzhangdd/p/5831112.html
http://www.cnblogs.com/hafiz/p/5360195.html
http://blog.csdn.net/jiangyu1013/article/details/52424726
http://blog.csdn.net/sunzhenhua0608/article/details/32938533