• 2018.5.3 maven


     1  maven基本概念

     1.1maven是什么

          1)软件项目管理和理解工具
          2)项目对象模型(Project Object Model,POM)
          3)项目的构建、报告和文档的中心信息

    1.2maven仓库

    1.3 pom.xml

        a)groupId:项目或者组织的唯一标志

        b)artifactId: 项目的通用名称

        c)version:项目的版本

        d)packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar

    1.4 lifecycle

    • validate
    • 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     接受编译好的代码,打包成可发布的格式,如 JAR 。
    • pre-integration-test
    • integration-test
    • post-integration-test
    • verify
    • install     将包安装至本地仓库,以让其它项目依赖。
    • deploy     将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

    1.5 常用命令

    mvn compile

    mvn package

    mvn install

    mvn clean package -DskipTests

    2  maven插件

    2.1简介

    Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的。Maven 插件通常用于:

    • 创建 jar 文件

    • 创建 war 文件

    • 编译代码文件

    • 进行代码单元测试

    • 创建项目文档

    • 创建项目报告

    一个插件通常提供了一组目标,可使用以下语法来执行:

    mvn [plugin-name]:[goal-name]

    例 mvn compile:compile

    2.2 插件解析机制

    Maven插件的来源:基本所有主要的maven插件都来自于Apache和CodeHaus,与依赖构件一样,插件构件同样基于坐标存储在Maven仓库中。

    在需要的时候,Maven会从本地仓库寻找插件,如果不存在,则从远程插件仓库查找。找到插件之后,再下载到本地仓库使用

    maven内置仓库配置如下,关闭了SNAPSHOT

    <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>

    3  maven常见问题及解决思路

    3.1 IDEA提示不能解析配置文件(文件已存在)

    出现这个问题的原因在于IDEA没有识别到该配置文件的路径,绝大的原因在于Maven的索引没有该文件 
    - 首先, 必须确定该资源文件的路径正确
    - 然后, 更新maven的索引:【选择项目】---【右键】---【maven】—【Reimport】

    3.2 项目依赖本地jar包(不想install到mvn的repository中),怎么配置? 

    <dependency>

        <groupId>com.dtdream.uim</groupId>
        <artifactId>uim-server-sdk</artifactId>
        <version>1.0.4-SNAPSHOT</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/uim-server-sdk.jar</systemPath>
    </dependency>

    maven 打包的时候默认是不加入依赖的jar包的,所以如果想打出一个独立的可运行的包时,需要加入如下plugin(以打war包为例):

    <build>
        <finalName>ipa</finalName>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
            <webResources>
              <resource>
              <directory>${project.basedir}/lib</directory>
              <targetPath>WEB-INF/lib</targetPath>
              <filtering>false</filtering>
              <includes>
                <include>**/*.jar</include>
              </includes>
              </resource>
            </webResources>
            </configuration>
            <version>2.1.1</version>
         </plugin>
        </plugins>
    </build>

    3.3 程序中有些单元测试有错误,如何忽略测试步骤

    (1) mvn package -DskipTests   不执行测试用例,但编译测试用例生成相应的class文件至target/test-classes下,可以在pom 文件中做如下修改:

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.5</version> 
        <configuration> 
          <skipTests>true</skipTests> 
        </configuration> 
    </plugin>

    (2) mvn package -Dmaven.test.skip=true 不执行测试用例,也不编译测试用例 ,可以在pom文件中做如下修改:

    <plugin> 
        <groupId>org.apache.maven.plugin</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>2.1</version> 
        <configuration> 
          <skip>true</skip> 
        </configuration> 
    </plugin> 
    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.5</version> 
        <configuration> 
            <skip>true</skip> 
        </configuration> 
    </plugin>

    3.4 maven类包冲突

    1)找到传递依赖的鬼出在哪里?
    mvn dependency:tree -Dverbose -Dincludes=[groupId]:[artifactId]:[version]

    2)将不想要的传递依赖剪除掉 

    假设我们不希望asm:asm:jar:1.5.3出现,根据分析,我们知道它是经由org.unitils:unitils-dbmaintainer:jar:3.3引入的,那么在pom.xml中找到这个依赖,做其它的调整:

    <dependency> 
        <groupId>org.unitils</groupId> 
        <artifactId>unitils-dbmaintainer</artifactId> 
    <version>${unitils.version}</version> 
      <exclusions> 
        <exclusion> 
          <artifactId>asm</artifactId> 
          <groupId>asm</groupId> 
        </exclusion> 
      </exclusions> 
    </dependency>

    3)清理IDEA缓存 

    前两个步骤完成之后,还提示有jar包冲突(典型症状是java.lang.ClassNotFoundException或Method不兼容等异常)。这种情况通常是由IEDA缓存造成的,建议Reimport一下maven列表就可以。

    3.5 项目发布到远程仓库

    <distributionManagement>
        <!-- 发布版本的构件的仓库 -->
            <repository>
            <id>releases</id>
            <name>Releases</name>
            <url>http://maven.dtdream.com/content/repositories/releases/</url>
            </repository>
    <!-- 快照版本的仓库-->
        <snapshotRepository>
          <id>snapshots</id>
            <name>Snapshots</name>
            <url>http://maven.dtdream.com/content/repositories/snapshots/</url>
       </snapshotRepository>
    </distributionManagement>

    一边喊着救命,一边享受沉沦。
  • 相关阅读:
    ELK——Logstash 2.2 mutate 插件【翻译+实践】
    Java 7 jps
    Java 7 jstat – JVM Statistics Monitoring Tool【翻译】
    ELK——Elasticsearch 搭建集群经验
    推荐算法——距离算法
    将 Book-Crossing Dataset 书籍推荐算法中 CVS 格式测试数据集导入到MySQL数据库
    AngularJS datepicker 和 datatimepicker
    AngularJS 模态对话框
    AngularJS Eclipse——新手入门【翻译+整理】
    ELK——为调试 Logstash Grok 表达式,安装 GrokDebuger 环境
  • 原文地址:https://www.cnblogs.com/fast-walking/p/8985477.html
Copyright © 2020-2023  润新知