Maven

Source
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Happy_wu/article/details/86583972

一、简介

Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念。

Maven简化和标准化项目建设过程。处理编译、分配、文档、团队协作和其他任务的无缝连接,增加可重用性并负责建立相关的任务。

最强大的功能就是能够自动下载项目依赖库。

二、Maven资源库

1、Maven启用代理访问(无法上网的情况)

        如果公司建立防火墙,且使用HTTP代理服务器来阻止用户直接连接到互联网,则Maven将无法下载任何依赖。因此需在Maven的配置文件中设置代理服务器:settings.xml.

        找到{M2_HOME}/conf/settings.xml, 并把你的代理服务器信息配置写入。

代码块

XML

<!-- proxies
   | This is a list of proxies which can be used on this machine to connect to the network.
   | Unless otherwise specified (by system property or command-line switch), the first proxy
   | specification in this list marked as active will be used.
   |-->
  <proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    -->
  </proxies>

 

取消注释代理选项,填写你的代理服务器的详细信息;保存文件,重新启动(非必需)。

4、Maven本地资源库

         Maven本地资源库:用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹。Mac OS默认为~/.m2目录文件夹

        a. 更新Maven的本地库:在{M2_HOME}\conf\setting.xml, 更新 localRepository 到其它名称

代码块

XML

<settings>
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
  <localRepository>D:\software\yiibai.com\apache-maven\repository</localRepository>
  </settings>

 

     b. 保存文件,执行命令(其实不知道是干啥的,保存的又是啥)

mvn archetype:generate -DgroupId=com.yiibai -DartifactId=NumberGenerator -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

5、Maven中央资源库

         Maven 将从本地资源库获得 Maven 的本地资源库依赖资源,如果没有找到,然后把它会从默认的 Maven 中央存储库 – http://repo1.maven.org/maven2/ 查找下载。

         Maven中心储存库网站已经改版本,目录浏览可能不再使用。这将直接被重定向到 http://search.maven.org/

6、Maven添加远程存储库

        如:为得到java.net的依赖,在pom.xml文件声明远程仓库。 

代码块

XML

<repositories>
  <repository>
      <id>java.net</id>
      <url>https://maven.java.net/content/repositories/public/</url>
  </repository>
</repositories>

               添加JBoss远程仓库:

代码块

XML

<project ...>
    <repositories>
      <repository>
  <id>JBoss repository</id>
  <url>http://repository.jboss.org/nexus/content/groups/public/</url>
      </repository>
    </repositories>
</project>

 

7、Maven依赖机制

 自动下载所有必需的依赖库,并保持版本升级。搜索库顺序:本地仓库——中央存储库——远程仓库

如:想使用 Log4j 作为项目的日志:

传统方式

Maven方式

访问http://logging.apache.org/log4j/

下载Log4j的jar库

复制jar到项目类路径

手动将其包含到项目的依赖

所有管理需要一切由自己做

知道log4j的Maven坐标(gruopId、artifactId、version)

自动下载log4j的1.2.14版本库(若无version标签,则当有新版本时自动升级库)

声明Maven的坐标转换成pom.xml文件

当 Maven 编译或构建,log4j 的 jar 会自动下载,并把它放到 Maven 本地存储库

 

代码块

XML

<dependencies>
    <dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.14</version>
    </dependency>
</dependencies>

注:GroupID是项目组织唯一的标识符,实际对应Java的包的结构,是main目录里java的目录结构。

       ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。

8、定制库到Maven本地资源库(如kaptcha:第三方java库,用来生成“验证码”的图片)(jar入库方式)

(1)下载 “kaptcha”,将其解压缩并将 kaptcha-version.jar 复制到其他地方,比如:C盘

(2)执行命令:mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

         “kaptcha” jar被复制到 Maven 本地存储库

(3)在pom.xml 中声明 kaptcha 的坐标

<dependency>

<groupId>com.google.code</groupId>

<artifactId>kaptcha</artifactId>

<version>2.3</version>

</dependency>

9、Maven外部依赖

(1)添加lib文件夹到src文件夹

(2)复制任何的jar到lib文件夹。如:ldapjdk.jar

(3)配置pom.xml。(指定 groupId 同样作为库的名称;指定 artifactId 同样作为库的名称;指定范围的系统;指定相系统项目的位置)

<dependency>

<groupId>ldapjdk</groupId>

<artifactId>ldapjdk</artifactId>

<scope>system</scope>

<version>1.0</version>

<systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>

</dependency>

10、Maven使用传递性依赖机制

三、使用Maven构建项目

1、Maven项目模板

     Maven 使用 Archetype 概念为用户提供不同类型的项目模板;而Archetype 是一个 Maven 插件,其任务是按照其模板来创建一个项目结构。

     命令:mvn archetype:generate

2、使用Maven创建java项目

     (1)使用命令行或终端:在要创建java项目的文件夹下执行:

mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

如果忽视 archetypeArtifactId 选项,一个巨大的 Maven 模板列表将列出。

     (2)自己手动参照maven目录结构创建文件夹

 

src/main/java

Application/Library sources

src/main/resources

Application/Library resources

src/main/resources-filtered

Application/Library resources which are filtered. (Starting with Maven 3.4.0, not yet released.)

src/main/filters

Resource filter files

src/main/webapp

Web application sources

src/test/java

Test sources

src/test/resources

Test resources

src/test/resources-filtered

Test resources which are filtered by default. (Starting with Maven 3.4.0, not yet released.)

src/test/filters

Test resource filter files

src/it

Integration Tests (primarily for plugins)

src/assembly

Assembly descriptors

src/site

Site

LICENSE.txt

Project's license

NOTICE.txt

Notices and attributions required by libraries that the project depends on

README.txt

Project's readme

3、Eclipse项目

(1)终端进入到项目中,执行命令:mvn eclipse:eclipse,然后导入到Eclipse IDE中

4、Maven打包

     参考pom.xml文件,包元素定义包应该输出什么。

代码块

XML

<project ...>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yiibai</groupId>
  <artifactId>NumberGenerator</artifactId>  
  <packaging>jar</packaging>  
  <version>1.0-SNAPSHOT</version>

      终端执行mvn package

4、Maven创建Web项目

(1)执行命令:mvn archetype:generate -DgroupId=com.yiibai -DartifactId=CounterWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

                           mvn eclipse:eclipse -Dwtpversion=2.0

(2)mvn site

四、Maven-项目

1、Maven构建项目

     打开控制台,进入到 pom.xml 文件所放的项目文件夹,执行mvn package

2、Maven清理项目      

    在基于Maven的项目中,很多缓存输出在“target”文件夹中。故建立项目部署时,执行mvn clean清理所有缓存的输出

3、Maven运行单元测试

    运行整个单元测试:mvn test

    运行单个测试(TestApp2):mvn -Dtest=TestApp2 test

4、将项目安装到本地资源库

    mvn install(当“install”在执行阶段,上述所有阶段 “validate“, “compile“, “test“, “package“, “integration-test“, “verify” 阶段, 包括目前的“install”阶段将被执行有序。)建议运行mvn clean install

 

 

五、Maven快照

        快照(SNAPSHOT )是一个特殊版本,指出目前开发拷贝。不同于常规版本,Maven 每生成一个远程存储库都会检查新的快照版本。

附录:

maven命令: 

 mvn archetype:create 创建Maven项目

mvn compile 编译源代码

mvn deploy 发布项目

mvn test-compile 编译测试源代码

mvn test 运行应用程序中的单元测试

mvn site 生成项目相关信息的网站

mvn clean 清除项目目录中的生成结果

mvn package 根据项目生成的jar

mvn install 在本地Repository中安装jar

mvn eclipse:eclipse 生成eclipse项目文件

mvnjetty:run 启动jetty服务

mvntomcat:run 启动tomcat服务

mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类

 

maven仓库资源查询:http://mvnrepository.com/