zoukankan      html  css  js  c++  java
  • Maven初识

    定义

    Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), 
    Maven can manage a project's build, reporting and documentation from a central piece of information. => Maven是一个软件项目管理和综合的工具,基于POM,从一块中心信息管理项目的构建,报告,以及文档。

    目标

    那么,大神们创造Maven的目的是什么呢?

    1. 1Making the build process easy 使工程build更容易
    2. Providing a uniform build system 提供一个统一的build系统
    3. Providing quality project information 提供高效的项目信息
    4. Providing guidelines for best practices development 为最好的开发实践提供准则
    5. Allowing transparent migration to new features 提供向新特性透明迁移

    安装方法
    1. 设置Java环境,包括JAVA_HOME参数
    2. 解压maven安装包,并将根目录设置到path


    Maven本身的配置
    1. MAVEN_OPTS environment variable:用于更改Maven默认启动参数,比如占用内存范围 -Xms256m -Xmx512m
    2. settings.xml file: 位于USER_HOME/.m2,为全局配置
    3. .mvn folder:位于具体project根目录,包括maven.config and extensions.xml

    有关setting的详细说明,请参考: https://maven.apache.org/settings.html


    运行

    mvn [options] [<goal(s)>] [<phase(s)>]

     整体顺序如下:

    1. clean - pre-clean, clean, post-clean
    2. default - validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy
    3. site - pre-site, site, post-site, site-deploy

    除了mvn package,mvn validate也是比较重要的


    常识概念

    1. 什么是SNAPSHOT version?

    是开发中的版本,发布为release版本时,会去除SNAPSHOT字样


     依赖 - dependency

    Dependency Scope

    1. compile: 默认范围,编译时可用,包含的所有class path可在编码时使用.
    2. provided:跟compile相似,不同的是只在编译,测试时使用,实际上,jdk或者将要发布的容器环境中已经存在,所以打包时不会包含
    3. runtime: 运行时使用,编译时并不检查
    4. test: 测试时使用
    5. system:跟provided类似,jar包环境中存在,不同的是需要明确指定位置
    6. import (2.0.9之后引入):用于dependencyManagement节点,一般用于版本集中管理, 这个方案可以解决parent依赖只能有一个的问题

    传递依赖: 可向被依赖主体传递(transitivity)的包括compile,runtime

    type: 依赖的type属性默认为jar,也可以为war,pom等。可以通过插件来自定义工程生成的依赖类型

    classifier:用于一个pom根据不同目的生成不同的包,比如支持的jdk版本不同。还有就是可以帮助生成附属产物,比如javadoc,source等

    完整信息请参考:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

    有关pom的完整说明,请参考:https://maven.apache.org/pom.html


    dependencyManagement节点

    一般用于项目的parent中,主要用于版本。

    当然,dependencyManagement里包含的dependency仍然需要在子项目的依赖中明确写上,只是不用写上版本号而已。


    插件 - Plugin

    举例如下,使用jdk1.5来编译工程

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.3</version>
          <configuration>  --- 插件参数配置
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </plugin>
      </plugins>
    </build>

    具体配置插件方法请参考:https://maven.apache.org/guides/mini/guide-configuring-plugins.html


     依赖包找不到的一般原因&解决途径

    1. Maven默认repository在:https://repo.maven.apache.org/maven2
    2. 如果默认repository没有,就需要添加repository,或者手动下载安装(特别是对于老版本jar)
    3. 手动安装方法:
    mvn install:install-file -DgroupId=jnuit -DartifactId=junit -Dversion=3.8.1 -Dpackaging=jar -Dfile=/path/to/file

    然后,要在pom依赖里加入该jar包属性:

    <scope>system</scope>
    <systemPath>${project.basedir}/lib/my-jar.jar</systemPath>

    高阶:如何搭建Repository Manager

    用处:https://maven.apache.org/repository-management.html

    方法:搜集资料中


     高阶:如何发布到自定义的的repository

    pom中添加

      <distributionManagement>
        <repository>
          <id>mycompany-repository</id>
          <name>MyCompany Repository</name>
          <url>scp://repository.mycompany.com/repository/maven2</url>
        </repository>
      </distributionManagement>

    setting.xml中添加认证信息

      <servers>
        <server>
          <id>mycompany-repository</id>
          <username>jvanzyl</username>
          <!-- Default value is ~/.ssh/id_dsa -->
          <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa)
          <passphrase>my_key_passphrase</passphrase>
        </server>
      </servers>


    另外,有以下几点需要知道:
    1. Maven是基于Java的,所有Java环境变量配置是必须的

    参考:http://maven.apache.org/index.html

    未完待续...

    ---栖息之鹰(一个外表懒洋洋的内心有激情的程序员) 此博客为笔者原著,转载时请注明出处,谢谢!
  • 相关阅读:
    【流量劫持】SSLStrip 终极版 —— location 瞒天过海
    【流量劫持】沉默中的狂怒 —— Cookie 大喷发
    【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持
    Web 前端攻防(2014版)
    流量劫持 —— 浮层登录框的隐患
    流量劫持能有多大危害?
    流量劫持是如何产生的?
    XSS 前端防火墙 —— 整装待发
    XSS 前端防火墙 —— 天衣无缝的防护
    XSS 前端防火墙 —— 无懈可击的钩子
  • 原文地址:https://www.cnblogs.com/roostinghawk/p/7965411.html
Copyright © 2011-2022 走看看