maven整理

来源:互联网 发布:pclinuxos和ubuntu 编辑:程序博客网 时间:2024/05/17 23:01

mvn test:运行test类

mvn compile:下载相关的包

mvn package:应用进行打包

mvn install:将下载的包放到本地的仓库

mvn archetype:generate     下载和archetype相关的包

mvn archetype:generate -DgroupId=zttc.itat.maven -DartifactId=maven-ch04 -Dversion=0.0.1-SNAPSHOT 创建一个maven工程

mvn clean source:jar 可以用来将源文件也打包成功

mvn help:describe

mvn package –Dtest=Hello.java:只执行一个测试类

mvn package –DskipTests=true :跳过测试,不会执行测试

mvn clean install -DskipTests=true:跳过测试直接安装

mvn cobertura:cobertura  这个用来生成测试报告(手动的形式)或者可以使用plugin的形式配置到pom.xml中


-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

mvn dependency:tree -->tree.txt  将依赖树信息输出到tree.txt文件中


工厂:http://mvnrepository.com/


2.、集成eclipse

(1)window->preferences->maven->installations点击Add,增加自己下载安装的maven

(2)window->preferences->maven->User Settings 修改自己的setting文件

(3)在eclipse中建立好一个maven工程之后,要增加source folder:src/main/resources和src/test/resources这两个用来放置我们再开发过程中需要的配置文件


3、dbunit可以用来测试数据库,而不影响原有的数据库数据


4、maven隐藏变量

Maven提供了三个隐式的变量可以用来访问环境变量,POM信息,和Maven Settings

env

env变量,暴露了你操作系统或者shell的环境变量。便 如在Maven POM中一个对${env.PATH}的引用将会被${PATH}环境变量替换,在Windows中为%PATH%.

projetc

project变量暴露了POM。可以使用点标记(.)的路径来引用POM元素的值。例如

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>project-a</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<finalName>${project.groupId}-${project.artifactId}</finalName>
</build>
</project>

当你使用mvn help:effective-pom 查看时,你会看到<finalName>org.sonatype.mavenbook-project-a</finalName>

  • ${basedir} 项目根目录
  • ${project.build.directory} 构建目录,缺省为target
  • ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
  • ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
  • ${project.packaging} 打包类型,缺省为jar
  • ${project.xxx} 当前pom文件的任意节点的内容

    settings

    settings变量暴露了Maven settings信息。可以使用点标记(.)的路径来引用settings.xml文件中元素的值。例如${settings.offline}会引用~/.m2/settings.xml文件中offline元素的值。

  • 5、模块开发

    加入已经开发好了user-core、user-log的maven工程模块,但是后面写的user-service需要使用上面的两个模块,则需要将user-core和user-log进行install命令,生成到本地的仓库中,这样再service中的pom.xml中进行引用的时候才能够找到。在前面两个模块的pom.xml上右键,run as->maven build->输入clean install就可以生成到本地仓库中,在service中的pom.xml可以通过以下方式引用:

    <dependency>      <groupId>${project.groupId}</groupId>      <artifactId>user-log</artifactId>      <version>${project.version}</version>    </dependency>        <dependency>      <groupId>${project.groupId}</groupId>      <artifactId>user-core</artifactId>      <version>${project.version}</version>    </dependency>

    6、easymock

    假如我已经开发完了service但是别人开发的dao还没有开发完,那么我需要测试与dao的通信是否正常,可以使用easymock

    public void testAdd() {
            UserDao userDao = createStrictMock(IUserDao.class);
            UserService userService = new UserService(userDao);
            userDao.add(new User());
            expectLastCall();
            replay(userDao);
            userService.add(new User());//看是否执行
            Verify(userDao);//每一个调用完,调用mock的verify方法来验证userDao
        }


    7、依赖特性

    <scope>...</scope>中有几个依赖的特性:

    (1)compile:在编译、测试、打包都有效,也是默认的情况

    (2)provided:在编译和测试时加入依赖,在打包时不加

    (3)test:测试范围有效,在编译和打包时不使用这个依赖(重要),只有在src/java/test下的java文件才会使用声明为test的jar包,其它位置的不会使用该jar包,如果其他位置有使用该jar包,那么就得把其它位置的java文件移动到src/java/test下

    (4)runtime:编译时候无用,只在测试、运行时有效,如对于mysql-connector的声明


    8、依赖传递

    当scope的范围是test的话,那么就不会讲依赖传递给其它模块,其它模块不会自动获得该所需jar包。


    9、maven的聚合操作:假如一个功能有好多模块,那么现在的情况就是我们需要对每个模块分别进行编译,打包,这样比较麻烦,可以通过在各个模块统一的根目录下统一建一个pom.xml文件,通过这个文件,来对所有的模块集中进行编译。

    在eclipse中建一个maven project,选择创建一个简单project


    选择pom


    生成的工程什么都不用做,只需要在pom.xml中增加对三个模块的聚合声明,到三个模块上面的共有的根目录下,然后run as ->mvn clean compile就可以直接运行所有的,而不用单独一个一个去运行

    <projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

      <modelVersion>4.0.0</modelVersion>

      <groupId>zttc.itat.user</groupId>

      <artifactId>user-aggregation</artifactId>

      <version>0.0.1-SNAPSHOT</version>

      <packaging>pom</packaging>

     

      <!--导入三个模块,对这三个模块做聚合操作 -->

      <modules>

      <module>../user-core</module>

      <module>../user-log</module>

      <module>../user-service</module>

      </modules>

    </project>

     

    10、maven继承(可以将聚合和继承放在一块)

    同上,仍然是建立一个简单project,然后也是只修改新建生成的pom.xml,如user-parent工程,在其pom.xml中写的是各个模块重复的内容,让所有的模块都继承这个pom,比如对于子模块user-core中的pom.xml中,可以使用下面来引用共有的声明

    <parent>

      <groupId>zttc.itat.user</groupId>

         <artifactId>user-parent</artifactId>

         <version>0.0.1-SNAPSHOT</version>

         <relativePath>../user-parent/pom.xml</relativePath>

      </parent>

    同理,其他模块也加入这个一部分声明。

    对于dependency,最好不要使用继承,因为那样会使每个模块都引用相同的依赖,但是又的模块并不需要那么多的依赖,这样会导致性能不好,但是可以在user-parent中pom.xml中通过dependencyManagement这个表签来声明所有的依赖,但是在子模块中仍然要写自己需要的jar,但是就不用写scope和version标签了,这两个标签使用的会直接用parent中的。

    <dependencyManagement>

      <dependencies>

          <dependency>

          <groupId>mysql</groupId>

          <artifactId>mysql-connector-java</artifactId>

          <version>5.1.24</version>

        </dependency>

       

        <dependency>

          <groupId>log4j</groupId>

          <artifactId>log4j</artifactId>

          <version>1.2.17</version>

        </dependency>

       

        <dependency>

          <groupId>org.dbunit</groupId>

          <artifactId>dbunit</artifactId>

          <version>2.5.1</version>

        </dependency>

       

        <dependency>

          <groupId>${project.groupId}</groupId>

          <artifactId>user-log</artifactId>

          <version>${project.version}</version>

        </dependency>

      </dependencies>

      </dependencyManagement>

     

    11、Nexus sonytype公司生产的私服,主要是为了将我们的依赖放在该私服中,这样就使得自己的机器和该私服处于一个局域网,加快依赖的下载速度,而不用去中央工程去下载,这样比较慢

    (1)将nexus的bin目录加入到环境变量,然后就可以在命令行使用nexus

    (2)修改……\nexus-2.11.2-06\bin\jsw\conf\wrapper.xml文件,将下面的部分修改为jdk(只能是jdk1.7以上的才可以)的绝对路径


    (3)命令行下执行 nexusinstall 安装这个服务

    (4)执行nexusstart 启动

    (5)使用localhost:8081/nexus访问即可,用户名和密码默认为admin和admin123

    (6)hosted工厂主要是局域网中的,不是针对公网,中央工厂下的资源都在Central这种工厂中,Apache Snapshots专门下载apache的snapshot

     

    (7)在parent/pom.xml中增加以下内容,该工程就会首先在本地找,本地找不到的话就在nexus中找,最后再向中央工厂去找。

    <repositories>

         <repository>

                <id>nexus</id>

                <name>NexusRespository</name>

          <url>http://localhost:8081/nexus/content/groups/public/</url>

         </repository>

      </repositories>

    为了增加通用性(这种配置的话,换一个项目就会变换配置一次,太麻烦),让所有的都支持这种方式,增加公共性,那么就在maven的settings.xml中进行设置如下:

    <profiles>

    <profile>

          <id>nexusProfile</id>

          <repositories>

                       <repository>

                              <id>nexus</id>

                              <name>NexusRespository</name>

                              <url>http://localhost:8081/nexus/content/groups/public/</url>

                              <releases>

                                     <enabled>true</enabled><!--可以下载release的jar包 -->

                              </releases>

                              <snapshots>

                                     <enabled>true</enabled><!--可以下载snapshot的jar包,需要手动开启 -->

                              </snapshots>

                       </repository>

                    </repositories>

        </profile>  

      </profiles>

      <!--只有激活之后才可以生效-->

      <activeProfiles>

          <activeProfile>nexusProfile</activeProfile>

      </activeProfiles>

     

    如果我要求在nexus中找不到的话也不去中央工厂去找,那么就可以使用镜像配置,同样是在settings.xml中进行配置,注意:mirrorOf的名字可以参考maven-model-builder-3.0.5.jar包中的pom.xml的配置来写,让相同名字的到该镜像中来找

    <!--工厂的镜像,只要mirrorOf中的工厂要访问,就会自动来找镜像,如果

         镜像无法访问,就不会去中央工厂,*表示所有的工程都使用镜像,推荐-->

         <mirror>

         <id>nexusMirror</id>

         <!--<mirrorOf>*</mirrorOf>-->

         <mirrorOf>nexus,central</mirrorOf>

          <name>Human ReadableName for this Mirror.</name>

         <url>http://localhost:8081/nexus/content/groups/public/</url>

        </mirror>

    12、提交到工厂:mvndeploy进行发布

    (1)首先在parent/pom.xml中增加

    <distributionManagement>

         <repository>

                <id>user-release</id>

                <name>userreleaseresp</name>

                <url>http://localhost:8081/nexus/content/repositories/releases/</url>

         </repository>

         <snapshotRepository>

                <id>user-snapshot</id>

                <name>usersnapshotresp</name>

                <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>

         </snapshotRepository>

      </distributionManagement>

     

    (2)对项目进行授权:在settings.xml中进行上面两个id的server的配置

    <server>

         <id>user-release</id>

         <username>deployment</username>

         <password>deployment123</password>

        </server>

        <server>

         <id>user-snapshot</id>

         <username>deployment</username>

         <password>deployment123</password>

        </server>

    (3)如果想每个项目建立一个自己的仓库,自己的角色等,那么就先创建release和snapshot的respository,然后就是创建该respository的privileges,然后创建roles,然后创建users,这样一层一层的建立

     

    13、声明周期

    Clean:①pre-clean ②clean ③post-clean

    Compile:….

     

    14、插件(要在parent中加入声明<bulid><pluginmagament></pluginmagament ></bulid>,在模块中的<bulid></bulid>标签中加入<plugins><plugin></plugin></plugins>来声明

    (1)complier插件,可以用来改变使用的jdk版本

    (2)Surefire插件可以用来包含那些测试java的,configuration中的include和exclude都会把相应的测试用的java文件进行加入或者排除,如果不加的话,默认的情况下,maven只会执行Test**、**Test、**TestCase这种测试java文件

     

     

    15、webapp

    (1)建立webapp的maven工程

    (2)建立源文件夹:src/main/java这里面用来存放相关的java代码

    (3)建立servlet,因为servlet需要依赖servlet.jar包,所以去中央仓库中寻找servlet-api版本,然后配到parent/pom.xml中

    (4)可以将前端的页面,如jsp文件放在工程/src/main/webapp下

    (5)执行mvn clean package 会生成相应的war文件,然后将该war放在tomcat中即可

    由于每次修改都要重新打包war,那么可以使用一种copy-maven-plugin插件,在执行mvn clean package之后将生成的war包直接拷贝到tomcat的webapp目录下,就不用手动进行拷贝了。

    (6)jetty插件来进行发布,增加jetty的插件,然后(该插件大概会每隔10s进行查找)

    clean compile jetty:run

    然后就可以根据配置的jetty来运行该web工程,这样就不用生成war再拷贝到tomcat了,直接就可以用jetty来作为服务器

     

     

    推荐书籍:

    (1)       java企业设计模式

    (2)       分析模式,可复用的对象模型

    http://www.xuexi111.com/jiaocheng/shipin/66165.html


    0 0
    原创粉丝点击