Maven配置

常见问题:

1,正常打包部署到私服maven-snapshots, 引用方的pom文件中通过maven-public报错:未找到

解决:mvn clean install -Dmaven.test.skip=true -U

 

2,打包到私服

mvn deploy:deploy-file -DgroupId=com.fadada.sdk -DartifactId=fadada-sdk -Dversion=1.0 -Dpackaging=jar -Dfile=E:\fadada-sdk-1.0.jar -Durl=http://120.55.59.214:8888/repository/3rd_party/ -DrepositoryId=nexus

 

 

Maven下载Jar包同时下载源文件和文档

mvn eclipse:eclipse -DdownloadSources -DdownloadJavadocs 

 第一个命令去取所有在POM中的的source code,第二个去取Javadocs

mvn dependency:sources 
mvn dependency:resolve -Dclassifier=javadoc

 

批量导出Maven项目依赖的jar

https://my.oschina.net/cloudcoder/blog/212648

 

编译跳过Test

-Dmaven.test.skip=true

 

安装jar:

$ mvn install:install-file -DgroupId=com.maven.multim -DartifactId=multim-client -Dversion=1.0-SNAPSHOT -Dpackaging=jar

  -Dfile=/e/mulJar/multim-client-1.0-SNAPSHOT.jar

常用命令---------------------------------------------------------------------------------------------------------------------------------------------
~~安装~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mvn -v
linux-设置maven环境变量
export M2_HOME = /?
export PATH = $PATH:$M2_HOME/bin
export MAVEN_OPTS=-Xms256m -Xmx512m


~~开发~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mvn compile 进行编译(将编译结果放在项目target文件夹中),并下载依赖的jar (编译时会查找依赖的Jar包,如果没有找到Jar包则需要添加依赖)(找不到Jar包的时候先到本地仓库中查找,如没有到远程仓库下载)
mvn test 进行测试
mvn package 打包jar,war(将打的包放在项目target文件中)
mvn clean 删除target(字节码文件,测试报告)
mvn install 安装jar到本地仓库中
(A项目需要引入B项目中的Class,则需在B项目根目录下mvn install将B项目Jar包安装到本地仓库中,然后在A项目中pom.xml添加B项目的依赖)
<dependency>
<groupId>com.ipudong.pdserver</groupId>
<artifactId>pdserver-client</artifactId>
<version>0.0.1SNAPSHOT</version>
</dependency>


~~Archetype~~~~~~~~~~~~~~~~~~~~~~~~~
---自动构建Maven目录结构
mvn archetype:generate
mvn archetype:generate -DgroupId=com.ipudong.pdserver -DartifactId=pdserver-client -Dversion=1.0.0SNAPSHOT -Dpackage=com.ipudong.pdserver.client
~~坐标~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
坐标(依赖的Jar的地址:groupId,artifactId,version):构件(依赖的Jar)
<dependency>
<groupId>com.ipudong.pdserver</groupId>
<artifactId>pdserver-client</artifactId>
<version>0.0.1SNAPSHOT</version>
</dependency>


~~仓库~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
中央仓库:
需要的jar再次可查
apache-maven-3.3.9\lib\maven-model-builder-3.3.9.jar\org\apache\maven\model\pom.xml https://repo.maven.apache.org/maven2
镜像仓库:
由于中央仓库在国外,为了方便访问,可以使用国内的镜像仓库,其内容与中央仓库内容一致,需要设置Maven的setting.xml配置
<mirror>
<id>CN</id>
<mirrorOf>central</mirrorOf> --表示凡是访问central仓库的,都使用以下定义的镜像仓库,也可以使用*表示所有仓库访问都转为使用此镜像仓库
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url> //此地址现在不能访问,说明问题即可
</mirror>
或者
<mirror>
<id>nexus</id>
<mirrorOf>central</mirrorOf>
<name>Nexus 197</name>
<url>http://nexus.healthbok-inc.com:8080/content/groups/public/</url> //内网服务器上创建的仓库
</mirror>
本地仓库
本地仓库默认使用:C:\Users\WWH\.m2\repository
本地仓库地址修改:setting.xml <localRepository>E:\DevFiles\Dev_libs</localRepository>


~~Maven插件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
eclipse4.0以上版本都安装了maven插件
eclipse4.0以下版本安装Mavne插件步骤:
1.将Maven插件解压到eclipse的plugin文件下重启eclipse
2.设置eclipse.ini 添加 -vm JDK的路径/bin/javaw.exe
3.设置eclipse默认的jre为自己安装的jdk
4.设置eclispe的maven的安装路径和安装的maven的setting.xml
5.eclipse创建maven项目后
①,pom.xml右键maven build--Goals:compile 进行编译 报错:-Dmaven.multiModuleProjectDirectory system propery is not set.
编辑第三步设置的jre:Default VM Arguments: -Dmaven.multiModuleProjectDirectory=$MAVEN_HOME(环境变量名)
②,pom.xml右键maven build--Goals:package 进行打包


~~完整的项目构建过程~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
清理,编译,测试,打包,集成测试,验证,部署


生命周期
注:如果执行生命周期后面的操作,则前面的操作会顺序执行
(clean , compile , test , package , install 中如果执行了package后compile和test是会依次执行的)
clean 清理
--pre-clean 执行清理前的工作
--clean 清理上一次构建生成的所有文件
--post-clean 执行清理后的文件
default 构建项目(最核心)
--compile,test,package,install
site 生成项目站点
--pre-site 在生成项目站点前要完成的工作
--site 生成项目的站点
--post-site 在生成项目站点后要完成的工作
--site-deploy 发布生成的站点到服务器上
maven的命令都是使用maven的插件完成的
例如:使用maven插件进行项目打包srouce操作:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
//绑定到Maven的生命周期中package,即在打jar包的时候会自动source操作,将项目打包
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>


POM.XML
<project>
<modelVersion>4.0.0</modelVersion>

<groupId>com.ipudong.pdserver</groupId>//公司网址+项目
<artifactId>pdserver</artifactId>//项目+模块
<version>1.0.0-SNAPSHOT</version> //版本 SNAPSHOT快照,ALPHA内部测试,BATA公测,RELEASE稳定,GA正式发布
<packaging>pom</packaging>//打包形式jar,war,pom,zip ...
<name>pdserver</name>//项目描述名
<url>http://maven.apache.org</url>//项目地址
<description></description>//项目描述
<developers></developers>//开发者
<licenses></licenses>//许可证
<organization></organization>//组织

<dependencies>//依赖
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>

<type></type>
<scope></scope>//依赖的范围例如test,则只在测试时使用
<optional></optional>//true或false,默认是false;若为true: 子项目必须引入 ;若为false:子项目默认可以继承

<exclusions>//排除依赖传递列表 A-->B B-->C C对A是传递依赖,若A不想依赖C则使用此标签
<exclusion></exclusion>
</exclusions>
</dependency>
</dependencies>


<dependencyManagement>//依赖的管理
<dependencies>
<dependency></dependency>//不会被运行,不会被引用到实际的依赖中,用于父模块中被子模块继承用的
</dependencies>
</dependencyManagement>


<build> //提供构建的支持
<plugins> //插件列表
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>

<parent></parent>//子模块对父模块的继承
<modules>//聚合多个Maven项目,可以一起进行编译
<module>pdserver-service</module>
<module>pdserver-util</module>
<module>pdserver-core</module>
<module>pdserver-client</module>
<module>pdserver-timer</module>
<module>pdserver-web</module>
</modules>

</project>


依赖范围:scope
<scope></scope>//依赖的范围例如test,则只在测试时使用
maven三种classpath:编译,测试,运行
scope用来设置三种classpath的关系
默认:compile 编译测试运行都有效
provided:编译测试
runtime:测试运行
test:测试
system: 编译,测试;与本地系统相关联,可移植性差
import: 导入范围,只使用在dependencyManagement中,表示从其他pom导入dependency的配置,例如:将项目模块A中依赖导入到项目模块B中

依赖传递
A-->B B-->C 对于A说C就是传递依赖
创建Maven项目:A,B,C ;
对A项目进行clean package,install;
在B项目中进行引入依赖A项目;
对B项目进行clean compile,clean install;
再C项目中进行引入依赖B项目;
对B项目进行clean compile;
然后在C项目中发现A依赖也被引入了,这就是依赖的传递;如果要使A项目只被B依赖就使用排除依赖,
在C项目中POM中定义exclusion,将B项目列入排除依赖列表,则A不会被C项目所依赖

依赖冲突
如果A和B依赖了不同版本的相同的构件,那依赖A和B的C考虑会依赖A和B哪个版本的构件?
1.短路优先:优先解析路径短的版本,例如A-->B-->C-->X ; A-->D-->X;则A会优先解析D
2.先声明先优先:如果路径长度相同,则谁先声明,先解析谁

聚合
聚合的项目的packaging为pom
添加构件:
<modules>
<module>pdserver-service</module>
<module>pdserver-util</module>
<module>pdserver-core</module>
<module>pdserver-client</module>
<module>pdserver-timer</module>
<module>pdserver-web</module>
</modules>
然后运行时会将子项目全部运行
例如进行 clean install;则子项目全部会依次进行compile--package--install

继承
例如多个子项目都有共同的依赖,可以将共同的依赖在父项目中进行提取管理使用dependencyManagement
父项目:
<dependencyManagement>//依赖的管理
<dependencies>
<dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
</dependency>
</dependency>//不会被运行,不会被引用到实际的依赖中,用于父模块中被子模块继承用的
</dependencies>
</dependencyManagement>
子项目:
POM中引入父标签<parent>
<parent>
<groupId>com.ipudong.pdserver</groupId>
<artifactId>pdserver</artifactId>
<version>0.0.1SNAPSHOT</version>
</parent>//子模块对父模块的继承
创建Maven-WEB项目
http://mvnrepository.com/ 在Maven仓库查找需要的依赖
1.创建archetype-webapp的maven的web项目
2.jsp文件报错缺少servlet,在pom添加servlet依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>//编译测试时运行
</dependency>
3.创建Maven目录结构
创建src/main/java,报错无法创建
方法一:可以在Navigator中创建,然后更新;
方法二:项目--properties--java build path--编辑Libraries中JRE System Library为自己安装的JRE 或者 Worksapce Default Jre
方法三:修改classpath文件,删除创建不了的SourceFolder
4.检查class文件的输出路径
build path中source:Output folder为target下的classes
5.将项目转为WEB项目
项目--properties--project facets--选中Dynamic web module
6.修改部署时的默认配置
项目--properties--Deployment Assembly 删除test的文件,因为发布测试的时候并不需要这些测试
7.安装jetty插件
在pom中添加jetty插件:
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16.v20140903</version>
</plugin>
</plugins>
8.运行
pom.xml 右键--maven--maven build -- Goals输入jetty:run mvn jetty:run
9.浏览器输入地址 : localhost:8080即可访问首页
10.可以添加在打包操作时运行jettyrun操作
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16.v20140903</version>
//在打包成功后使用 jetty:run来运行jetty服务
//绑定到Maven的生命周期中package,即在打jar包的时候会自动source操作,将项目打包
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>

</plugin>
</plugins>
11.pom执行clean package进行打包,部署

12.使用tomcat进行打包部署,安装插件,pom执行clean package进行打包,部署
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
//在打包成功后使用 jetty:run来运行jetty服务
//绑定到Maven的生命周期中package,即在打jar包的时候会自动source操作,将项目打包
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>

</plugin>
</plugins>


~~开发~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mvn help:system 在用户下创建本地仓库~/.m2/repository
mvn clean compile 清理编译
mvn clean test 清理测试
mvn clean package 清理打包
mvn clean install 清理将打包好的jar存入本地仓库
mvn archetype:generate 使用Archetype生成项目骨架
mvn clean deploy 将项目发布到远程仓库中
~~目录结构~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/main/java
src/main/resource
src/test/java
src/test/resource
~~依赖~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mvn dependency:list 显示所有已解析的依赖
mvn dependency:tree 以目录的形式展现依赖
mvn dependency:analyze 第一部分显示已经使用但是未显示依赖的,第二部分显示项目未使用的但是依赖的
~~构建~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
构件:jar,war,依赖的jar, 插件
构建:编译,测试,打包,发布
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

常见问题------------------------------------------------------------------------------------------------------------------------------------------------------
0.pdbss中引用的pdmall的jar包无法更新
解决:删除本地仓库中的jar,然后编译

1.Maven创建不了src/main/java(SourceFolder)
方法一:项目--properties--java build path--编辑Libraries中JRE System Library为自己安装的JRE 或者 Worksapce Default Jre
方法二:修改classpath文件,删除创建不了的SourceFolder
方法三:在eclipse里Navigator里面创建,然后更新
2.创建完WEB项目后jsp文件报错缺少servlet
解决:添加依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>//编译测试时运行
</dependency>
3.编码GBK的不可映射字符
方法一,修改eclipse中的jre为自己安装的JRE:D:\PdDev\java\JRE
方法二,修改maven编码
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
或者
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding><!-- 指定编码格式,否则在DOS下运行mvn compile命令时会出现莫名的错误,因为系统默认使用GBK编码 --> </configuration>

错误详情:
E:\MyFiles\Git_Pro\pdmall\pdmall-client>mvn clean compile
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building pdmall-client 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ pdmall-client ---
[INFO] Deleting E:\MyFiles\Git_Pro\pdmall\pdmall-client\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ pdmall-cli
ent ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\MyFiles\Git_Pro\pdmall\pdmall-clie
nt\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ pdmall-client -
--
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to E:\MyFiles\Git_Pro\pdmall\pdmall-client\targe
t\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] E:\MyFiles\Git_Pro\pdmall\pdmall-client\src\main\java\com\iputong\pdmall
\client\domain\user\ExperienceDO.java:[12,36] 错误: 编码GBK的不可映射字符
[ERROR] E:\MyFiles\Git_Pro\pdmall\pdmall-client\src\main\java\com\iputong\pdmall
\client\domain\user\ExperienceDO.java:[13,32] 错误: 编码GBK的不可映射字符
[ERROR] E:\MyFiles\Git_Pro\pdmall\pdmall-client\src\main\java\com\iputong\pdmall
\client\domain\user\ExperienceDO.java:[13,37] 错误: 编码GBK的不可映射字符
[ERROR] E:\MyFiles\Git_Pro\pdmall\pdmall-client\src\main\java\com\iputong\pdmall
\client\domain\user\ExperienceDO.java:[13,38] 错误: 编码GBK的不可映射字符
[INFO] 4 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.929 s
[INFO] Finished at: 2016-05-06T15:04:39+08:00
[INFO] Final Memory: 11M/150M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.
1:compile (default-compile) on project pdmall-client: Compilation failure: Compi
lation failure:
[ERROR] E:\MyFiles\Git_Pro\pdmall\pdmall-client\src\main\java\com\iputong\pdmall
\client\domain\user\ExperienceDO.java:[12,36] 错误: 编码GBK的不可映射字符
[ERROR] E:\MyFiles\Git_Pro\pdmall\pdmall-client\src\main\java\com\iputong\pdmall
\client\domain\user\ExperienceDO.java:[13,32] 错误: 编码GBK的不可映射字符
[ERROR] E:\MyFiles\Git_Pro\pdmall\pdmall-client\src\main\java\com\iputong\pdmall
\client\domain\user\ExperienceDO.java:[13,37] 错误: 编码GBK的不可映射字符
[ERROR] E:\MyFiles\Git_Pro\pdmall\pdmall-client\src\main\java\com\iputong\pdmall
\client\domain\user\ExperienceDO.java:[13,38] 错误: 编码GBK的不可映射字符
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
ch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please rea
d the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
eption


推荐几个好的 Maven 常用仓库网址:
http://mvnrepository.com/
http://search.maven.org/
http://repository.sonatype.org/content/groups/public/
http://people.apache.org/repo/m2-snapshot-repository/
http://people.apache.org/repo/m2-incubating-repository/
*groupId: 项目名pdserver:com.ipudong.pdserver
*artifactId: 项目模块:pdserver-client
*version: 版本
*packaging: Maven项目的打包方式
classifier: 定义附加的插件生成的附属构件
文件名: artifactId-version[-classifier].packaging pdserver-core-1.0.0-SNAPSHOT.jar

1.pom.xml--Overview
------Parent
<parent>
<groupId>com.ipudong.server</groupId>
<artifactId>pdserver</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
------Artifact
<groupId>com.ipudong.server</groupId>
<artifactId>pdserver-core<artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
------Project
<name>pdserver-core</name>
<url>http://maven.apache.org</url>
2.pom.xml--Dependencies
<dependencies>
<dependency>
<groupId>com.ipudong.server</groupId>
<artifactId>pdserver-client</artifactId>
</dependency>

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
</dependencies>
3.Eclipse导入Maven项目
Maven下载项目Jar包
Maven配置文件: D:\PdDev\apache-maven-3.3.9\conf\settings.xml 设置Jar包路径
mvn eclipse:eclipse 生成Eclipse项目
mvn dependency:copy-dependencies 下载Maven项目依赖的jar包
Eclipse设置:windows--preferences--Maven--UserSettings--User Settings(Maven配置文件settings.xml) Update Settings
Local Repository(Maven配置文件settings.xml里的localRepository,Maven下载Jar的路径)

4.命令行
<1>安装本地Jar到Maven本地仓库
mvn install:install-file -Dfile=jar绝对路径 -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar
<2>创建符号链接方便以后升级
ln -s apache-maven-3.0 apache-maven
<3>编译
mvn clean compile //项目根目录 //clean: clean resources: resources complier: complie
<4>调用Maven执行测试
mvn clean test //clean:clean resources:resources complier:complie resources:testResources complier:testComplie
<5>打包
mvn clean package // jar:jar
<6>让其他Maven项目直接引用这个jar包
mvn clean install //install: install
5.HTTP代理设置
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>127.0.0.1</host>
<port>8080</port>
<nonProxyHosts>local.net|*.google.com</nonProxyHosts> 不需要代理的主机名
</proxy>
</proxies>

 

posted @ 2017-03-07 13:35  wanhua.wu  阅读(622)  评论(0编辑  收藏  举报