博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven学习,使用笔记
阅读量:6158 次
发布时间:2019-06-21

本文共 7676 字,大约阅读时间需要 25 分钟。

  hot3.png

Maven使用笔记

使用Maven有一段时间了,用它做过几个项目的构建工具,感觉还是非常不错的,省去很多不必要的麻烦,比如jar包的依赖管理,升级等,还可以处理一些繁杂的事务,比如简单的代码生成,数据导入导出等。当然这里有一定的学习成本!

本文就一些常规使用做了介绍,包括一些需要注意的地方和本人常人的配置插件等。

特别说明,由于settings.xml是针对全局或个人的设置,不能随项目走,所以本文直接无视settings.xml的配置!

Maven一般目录结构

.pom.xmlsrc   |-main         |-java         |-resources         |-webapp   |-test         |-java         |-resourcestarget

Maven属性设置

项目属性配置

加*项是建项目必要属性

属性名称 描述
groupId * 当前项目隶属的上级项目ID,一般是系列相关子项目的组ID,如:org.springframework
artifactId * 当前项目模块ID,一般为实际项目ID,如:spring-web
version * 此项目模块的版本
packaging 项目类型,jar或war,默认为jar
name 项目名称,如果跟IDE配合使用时IDE会识别此名称
description 项目描述
organization 所属组织
licenses 许可协议
mailingLists 邮件列表
developers 开发者
contributors 贡献者
issueManagement 问题追踪系统
ciManagement 持续集成系统
scm 版本控制系统

POM一般属性变量

名称 说明
${basedir} 项目根目录,包含pom.xml文件的目录
${version} 项目的版本
${pom.build.sourceDirectory} 项目的主源码目录,默认为:src/main/java
${pom.build.testSourceDiretory} 项目的测试源码目录, 默认为:src/test/java
${pom.build.directory} 项目构建输出目录,默认为target
${pom.outputDirectory} 项目主代码编译输出目录,默认为: target/classess
${pom.testOutputDirectory} 项目主代码编译输出目录,默认为: target/test-classess
${pom.groupId} 项目的groupId
${pom.artifactId} 项目的artifactId
${pom.version} 项目的版本
${pom.build.finalName} 项目打包输出文件的名称,默认为${pom.artifactId}-${pom.version}

以上build属性可通过pom.xml文件中build结点指定如:

${pom.basedir}/target
${pom.build.directory}/classes
${pom.artifactId}-${pom.version}
${pom.build.directory}/test-classes
${pom.basedir}/src/main/java
src/main/scripts
${pom.basedir}/src/test/java
${pom.basedir}/src/main/resources
${pom.basedir}/src/test/resources

更多内容:

自定义属性变量

在根结点增加:

3.1-RELEASE
4.2-FINAL

资源文件使用Maven变量

如有文件 src/main/resources/application.properties

# application.propertiesapplication.name=${pom.name}application.version=${pom.version}

执行命令:mvn process-resources maven会给其中的亦是赋值:

# application.propertiesapplication.name=Maven Quick Start Archetypeapplication.version=1.0-SNAPSHOT

更多内容:

Maven依赖管理

自定义源地址

如在maven的中央仓库中没有你要用的jar包,通过自定义源解决:

central
Maven Repository Switchboard
default
http://repo1.maven.org/maven2
false

排除依赖和子项目依赖

bgonline
foundation
1.0.0
log4j
log4j

本地JAR包安装

##安装jar文件call mvn install:install-file -Dfile=xxx-1.0.0.jar -DgroupId=com.xx -DartifactId=xx -Dversion=1.0.0 -Dpackaging=jar##安装pom文件call mvn install:install-file -Dfile=xxx-1.0.0.pom.xml -DgroupId=com.xx -DartifactId=xx -Dversion=1.0.0 -Dpackaging=pom

Maven插件管理

添加插件:

maven-antrun-plugin
1.3

自定义插件源

central
Maven Plugin Repository
http://repo1.maven.org/maven2
default
false
never

常用插件

名称 说明
jetty-maven-plugin jetty插件,轻量级web容器,推荐阶段开发使用
maven-antrun-plugin 跑ant命令插件,常用来做文件处理,sql执行等,基本包括ant所有功能
native2ascii-maven-plugin 转ascii,如多语言配置文件的中文转成ascii码解决乱码问题
versions-maven-plugin 检测所有依赖的更新情况
maven-surefire-plugin 生成测试报告,配全Testng,指定单元测试的配置文件,进行分组、分类、分包测试,可参考Testng文档说明

更多内容:

Maven Profile使用

有时候会根据不同的情况执行不现的构建命令,这就用到maven的profile,profile可以直接写在pom.xml里也可以被提出到独立文件profiles.xml同pom.xml同级目录或settings.xml,但Maven3只支持写在pom.xml文件里,why?!

1.使用profile+ant执行sql做数据初始化:

INIT-DB-DATA
org.apache.maven.plugins
maven-antrun-plugin

2.使用maven profile ant hibernate-tools生成类bean:

Gen-Java-Bean
org.apache.maven.plugins
maven-antrun-plugin

更多内容:

Maven多项目配置

创建如下目录结构:

+- pom.xml 父+- my-app| +- pom.xml 子1,jar类型| +- src|   +- main|     +- java+- my-webapp| +- pom.xml 子2,webapp类型| +- src|   +- main|     +- webapp

父pom内容如下:

4.0.0
com.mycompany.app
app
1.0-SNAPSHOT
pom
my-app
my-webapp

注:一些项目全局属性可在此pom文件中设置,比如项目信息,所有依赖等,这样在子项目就不用重复申明,如依赖可省掉版本号,直接使用父pom中的版本,这样可以统一管理所有项目的依赖版本。

子1的pom内容如下:

com.mycompany.app
app-jar
jar
com.mycompany.app
app
1.0-SNAPSHOT
...

子2的pom内容如下:

com.mycompany.app
app-war
war
com.mycompany.app
app
1.0-SNAPSHOT
...

子2需要依赖子1,配置如下:

...
com.mycompany.app
my-app
1.0-SNAPSHOT
...

最后在父pom所在目录执行mvn clean install命令,jar包会被安装本地仓库,war会被发布到target目录。

Maven创建项目

创建java项目

mvn archetype:generate \  -DarchetypeGroupId=org.apache.maven.archetypes \  -DgroupId=com.mycompany.app \  -DartifactId=my-app

生成的目录结构:

my-app|-- pom.xml`-- src    |-- main    |   `-- java    |       `-- com    |           `-- mycompany    |               `-- app    |                   `-- App.java    `-- test        `-- java            `-- com                `-- mycompany                    `-- app                        `-- AppTest.java

创建java webapp

mvn archetype:generate \-DarchetypeGroupId=org.apache.maven.archetypes \-DarchetypeArtifactId=maven-archetype-webapp \-DgroupId=com.mycompany.app \-DartifactId=my-webapp

生成的目录结构:

+- my-webapp| +- pom.xml| +- src|   +- main|     +- resources|     +- webapp|       +- index.jsp|       +- WEB-INF|         +- web.xml

之后根据需要在main下创建java目录,在src创建test目录。

生命周期常用命令

  1. 编译 mvn compile,编译测试 mvn test-compile,不执行测试,仅编译
  2. 测试 mvn test,执行测试
  3. 打包 mvn package,java项目打成jar包,web项目打包war包
  4. 安装 mvn install,将自己java项目生成的jar包安装到本地仓库
  5. 站点 mvn site,根据pom.xml配置信息生成项目相关的站点在target/site
  6. 清除 mvn clean,将target目录下build后的内容删除

更多内容:

布署jar至私服配置,在项目的pom.xml中配置

<distributionManagement>  

               <!-- 配置快照版本发布的仓库-->  
        <snapshotRepository>  
            <id>nexus-snapshot</id>  
            <name>Nexus Snapshots Repository</name>  
            <url>http://192.168.1.240:8081/nexus/content/repositories/snapshots/</url>  
        </snapshotRepository>  
                <!-- 配置release版本发布的仓库-->      
        <repository>  
            <id>nexus-release</id>  
            <name>Nexus Releases Repository</name>  
            <url>http://192.168.1.240:8081/nexus/content/repositories/releases/</url>  
        </repository>  
    </distributionManagement>

更多Maven参考

POM详细说明文档 :

POM说明3.0.5版:
Maven-3.0.5文档:
maven.apache.org:
docs.codehaus.org:

转载于:https://my.oschina.net/chaun/blog/482491

你可能感兴趣的文章
win10中遇到qq视频时摄像头打不开没反应的解决方法
查看>>
介绍自己的一个Android插桩热修复框架项目QuickPatch
查看>>
关于textarea的ie9的maxlength不起作用的问题,请参考如下URL解决。
查看>>
勒索病毒GANDCRAB新变种GANDCRAB V5.2新变种来袭 你中招了吗?
查看>>
Solr Facet 查询
查看>>
C++类的继承一
查看>>
数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案...
查看>>
巧用VMware Workstation的clone来制作虚拟机模板
查看>>
Spring-Mybatis MapperScannerConfigurer 取不到PropertyPlaceholderConfigurer里的值
查看>>
HP DL380G4服务器前面板指示灯的含义
查看>>
数据结构_树结构
查看>>
常用URL地址
查看>>
每天一个linux命令(19):find 命令概览
查看>>
MySQL kill操作
查看>>
windows下看端口占用
查看>>
Decommissioning a Domain Controller 降域控
查看>>
Character中的奇葩
查看>>
c++书籍推荐
查看>>
互联网通用架构技术----缓存雪崩
查看>>
Dell R710服务器磁盘恢复数据库一例(记录)
查看>>