文档章节

Maven学习,使用笔记

chaun
 chaun
发布于 2015/07/22 20:24
字数 2010
阅读 28
收藏 0
点赞 0
评论 0

Maven使用笔记

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

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

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

Maven一般目录结构

.
pom.xml
src
   |-main
         |-java
         |-resources
         |-webapp
   |-test
         |-java
         |-resources
target

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结点指定如:

<build>
    <directory>${pom.basedir}/target</directory>
    <outputDirectory>${pom.build.directory}/classes</outputDirectory>
    <finalName>${pom.artifactId}-${pom.version}</finalName>
    <testOutputDirectory>${pom.build.directory}/test-classes</testOutputDirectory>
    <sourceDirectory>${pom.basedir}/src/main/java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${pom.basedir}/src/test/java</testSourceDirectory>
    <resources>
      <resource>
        <directory>${pom.basedir}/src/main/resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>${pom.basedir}/src/test/resources</directory>
      </testResource>
    </testResources>
<build>

更多内容:MavenPropertiesGuide

自定义属性变量

在根结点增加:

<projecties>
    <spring.version>3.1-RELEASE</spring.version>
    <hibernate.version>4.2-FINAL</hibernate.version>        
    <!-- 使用${spring.version}读取 -->
</projecties>

资源文件使用Maven变量

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

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

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

# application.properties
application.name=Maven Quick Start Archetype
application.version=1.0-SNAPSHOT

更多内容:http://maven.apache.org/guides/getting-started/index.html#How_do_I_filter_resource_files

Maven依赖管理

自定义源地址

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

<repositories>
    <repository>
        <id>central</id>
        <name>Maven Repository Switchboard</name>
        <layout>default</layout>
        <url>http://repo1.maven.org/maven2</url>
        <snapshots>
        <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

排除依赖和子项目依赖

<dependency>
    <!-- 子项目,被依赖的子项目必须经过maven的install安装,不然maven还是找不到! -->
    <groupId>bgonline</groupId>
    <artifactId>foundation</artifactId>
    <version>1.0.0</version>
    <!-- 排除 -->
    <exclusions>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

本地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插件管理

添加插件:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.3</version>
            </plugin> 
        </plugins>
    </pluginManagement>
</build>

自定义插件源

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <name>Maven Plugin Repository</name>
        <url>http://repo1.maven.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <updatePolicy>never</updatePolicy>
        </releases>
    </pluginRepository>
</pluginRepositories>

常用插件

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

更多内容:plugins

Maven Profile使用

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

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

<profile>
    <id>INIT-DB-DATA</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <configuration>
                    <target>
                        <sql driver="${jdbc.driver}" url="${jdbc.url}" userid="${jdbc.username}" password="${jdbc.password}" onerror="continue">
                            <classpath refid="maven.runtime.classpath"/>
                            <transaction src="src/main/resources/sql/${jdbc.direct}/schema.sql"/>
                        </sql>
                    </target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>

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

<profile>
    <id>Gen-Java-Bean</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <configuration>
                    <target>
                        <echo message="生成表ENTITY类……"/>
                        <property name="toolsDir" value="src/test/tools"/>
                        <!-- 这里需要指定hibernatetool相关jar包,自行下载 -->
                        <path id="lib.class.path">
                            <fileset dir="${toolsDir}/lib">
                                <include name="*.jar"/>
                            </fileset>
                        </path>
                        <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="lib.class.path"/>
                        <hibernatetool destdir="${toolsDir}/lib/build">
                            <jdbcconfiguration propertyfile="${toolsDir}/lib/cfg/jdbc.properties" revengfile="${toolsDir}/lib/cfg/hibernate.reveng.xml"/>
                            <!-- 指定hibernatetools生成bean的模板,根据自己需要定制生成内容,用的freemarker引擎,在hibernate-tools.jar包里有默认模板 -->
                            <hbmtemplate
                                    destdir="${toolsDir}/lib/build"
                                    templatepath="${basedir}/${toolsDir}/lib/hbmtemplates/"
                                    templateprefix="/hbmtemplates"
                                    filepattern="{class-name}Entity.java"
                                    template="pojo2/Pojo.ftl">
                                <property key="ejb3" value="false"/>
                                <property key="jdk5" value="false"/>
                            </hbmtemplate>
                            <!-- 或者直接 <hbm2java/> 只是这样使用的是默认模板 -->
                        </hibernatetool>
                    </target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>

更多内容:profiles.html

Maven多项目配置

创建如下目录结构:

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

父pom内容如下:

<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.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>my-app</module>
    <module>my-webapp</module>
  </modules>
</project>

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

子1的pom内容如下:

<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">
    <groupId>com.mycompany.app</groupId>
    <artifactId>app-jar</artifactId>
    <packaging>jar</packaging>
    <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>app</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    ...

子2的pom内容如下:

<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">
    <groupId>com.mycompany.app</groupId>
    <artifactId>app-war</artifactId>
    <packaging>war</packaging>
    <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>app</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    ...

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

...
<dependencies>
<dependency>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
...
</dependencies>

最后在父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后的内容删除

更多内容:lifecycle.html

布署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详细说明文档 :http://maven.apache.org/pom.html
POM说明3.0.5版:http://maven.apache.org/ref/3.0.5/maven-model/maven.html
Maven-3.0.5文档:http://maven.apache.org/ref/3.0.5/
maven.apache.org:http://maven.apache.org/guides/getting-started/
docs.codehaus.org:http://docs.codehaus.org/display/MAVENUSER

本文转载自:http://www.cnblogs.com/xguo/archive/2013/06/01/3113146.html

共有 人打赏支持
chaun
粉丝 87
博文 270
码字总数 96237
作品 0
深圳
高级程序员
springmvc学习笔记(6)-springmvc整合mybatis(IDEA中通过maven构建

springmvc学习笔记(6)-springmvc整合mybatis(IDEA中通过maven构建) 标签: springmvc mybatis [TOC] 本文主要展示如何在intellij IDEA中通过maven构建springmvc+mybatis框架的开发环境。 需求...

brianway
2016/03/10
432
0
Java读取Evernote笔记 – 使用DeveloperToken

在学习的时候,经常使用Evernote记录一下笔记或收藏一些有用的文章。如果通过Java读取Evernote文章哪?官方给处理授权接口。 首先我们需要在Evernote的sandbox环境注册一个账户,https://san...

YOTOO
2014/07/05
0
1
121 基于MVC框架下的网上书店系统 002 项目开发计划

计划列表 一、笔记 二、周边技术 三、周边工具 四、英文文档 计划说明 一、笔记   这一部分主要是记录一些技术上的问题,比如Spring MVC的配置,Hibernate的一对多、多对一,又或者Maven/G...

小代码2016
2016/09/11
54
0
springmvc+mybatis学习笔记(汇总)

springmvc+mybatis学习笔记(汇总) 标签 : springmvc mybaits [TOC] 笔记分为两大部分:mybatis和springmvc mybatis springmvc 笔记内容主要是mybatis和springmvc的一些基本概念和使用方法,...

brianway
2016/03/30
1K
2
MAVEN 学习笔记

一、MAVEN是什么? maven将自己定位为一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西: 版本——maven有自己的版本定义和规则 构建——maven支持许多种的应用程序类型,对于每...

lizo
2016/12/04
20
0
git文章列表

关于gitlab默认clone协议 Git实现从本地添加项目到远程仓库 翻翻git之---一个简单的标签控件 LabelView (随手发了两张小宝宝的玩耍照) Git 项目推荐 | Java 版微信普通号机器人 翻翻git之---...

d_watson
2016/04/20
26
0
maven学习笔记一(认识maven)

mavn是什么? Maven是一个构建工具,服务与构建.使用Maven配置好项目后,输入简单的命令,如:mvn clean install,Maven会帮我们处理那些繁琐的任务. Maven是跨平台的. Maven最大化的消除了构建的重...

吕兵阳
2015/10/02
159
0
appium 安装教程链接整理

Appium 做Android 自动化测试环境搭建+示例代码运行 :http://blog.csdn.net/pajack/article/details/29390031 安装eclipse的maven插件:http://jingyan.baidu.com/article/60ccbceb01de4d64......

智能小松鼠
2014/11/26
0
2
JavaScript-JSON解析

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 JSON解析: 我们很多的数据描述都使用JSON ,JSO...

凯哥学堂
2017/10/20
0
0
spring security学习笔记1

最简单的SS模型,一个SS的Hello World~ 使用SS需要用到的JAR是:spring,spring security; 一,概要 1,使用maven构建项目,下载JAR包,如果不用maven也可以自己下载JAR包以及依赖包; 2,配...

安世博
2014/11/08
425
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
2
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
1
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
161
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部