Maven的整合 聚合项目

Maven 是 Apache 组织下的一个跨平台的项目管理工具,它主要用来帮助实现项目的构建、测试、打包和部署。

src/main/java   代码
src/main/resources  配置文件
src/test/java  测试代码
src/test/resources  测试代码配置文件

就是在pom.xml中根据一些标签来管理。

<groupId> … </groupId>

 <artifactId> … </artifactId>

 <version> … </version>

这三个唯一确定一个依赖

<dependencyManagement> … </dependencyManagement>可以管理依赖,当有子工程依赖了父工程时,如果父工程中没有这个标签,那么子工程默认有父工程的全部依赖,如果有则子工程一个父工程的依赖都没有,
因为被管理起来了,如果想要哪些就自己粘过去,因为往往你可能不需要全部的依赖,只是粘过去后,依赖的版本可以省略,因为父工程已经指定了。

我们项目中依赖的 Jar 包可以通过依赖的方式引入,通过在 dependencies 元素下添加 dependency 子元素,可以声明一个或多个依赖。通过控制依赖的范围,可以指定该依赖在什么阶段有效。Maven 的几种依赖范围:
在<scope>标签中:

compile 编译,测试,运行。默认的依赖范围。

test 测试,如 Junit。

runtime 运行,如 JDBC。

provided 编译,测试,如 ServletAPI。

容器或JDK已提供范围,表示该依赖包已经由目标容器(如tomcat)和JDK提供,只在编译的classpath中加载和使用,打包的时候不会包含在目标包中。最常见的是j2ee规范相关的servlet-api和jsp-api等jar包,一般由servlet容器提供,无需在打包到war包中,如果不配置为provided,把这些包打包到工程war包中,在tomcat6以上版本会出现冲突无法正常运行程序(版本不符的情况)。 

system 编译,测试,依赖于系统变量。

 继承

在面向对象的编程中我们学会了继承的概念,继承是可重用行即消除重复编码的行为。Maven 中继承的用意和面向对象编程中是一致的。与聚合的实现类似,我们通过构建父模块将子模块共用的依赖,插件等进行统一声明,在聚合和继承同时使用时,我们可以用同一个父模块来完成这两个功能。

例如将 com.dugeng.parent 这个模块声明为 project1 和 project2 的父模块,那么我们在 project1 和 2 中用如下代码声明父子关系

 继承

<parent>

 <groupId>com.dugeng.mavenproject</groupId>

 <artifactId>com.dugeng.parent</artifactId>

 <version>0.0.1-SNAPSHOT</version>

 <relativePath>../com.dugeng.parent/pom.xml</relativePath>

</parent>

就是在自己的pom中有一个<parent>即可,而父pom中不需要子pom的相关配置,对比Java对象的继承理解。

依赖是具有传递性的,例如 Project A 依赖于 Project B,B 依赖于 C,那么 B 对 C 的依赖关系也会传递给 A,如果我们不需要这种传递性依赖,也可以用 <optional> 去除这种依赖的传递,如清单 5。

清单 5. 选择性依赖

<dependency>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

<version>1.1.1</version>

<optional>true<optional>

</dependency>

假设第三方的 jar 包中没有使用 <optional> 来去除某些依赖的传递性,那么可以在当前的 POM 文件中使用 <exclusions> 元素声明排除依赖,exclusions 可以包含一个或者多个 exclusion 子元素,因此可以排除一个或者多个传递性依赖。如清单 6。

清单 6. 排除依赖

   <dependency>    

        <groupId>org.springframework</groupId>  

        <artifactId>spring-core</artifactId>  

        <exclusions>  

              <exclusion>      

                   <groupId>commons-logging</groupId>          

                   <artifactId>commons-logging</artifactId>  

              </exclusion>  

        </exclusions>  

   </dependency>
   
  聚合

现实中一个项目往往是由多个 project 构成的,在进行构建时,我们当然不想针对多个 project 分别执行多次构建命令,这样极容易产生遗漏也会大大降低效率。Maven 的聚合功能可以通过一个父模块将所有的要构建模块整合起来,将父模块的打包类型声明为 POM,通过 <modules> 将各模块集中到父 POM 中。如清单 7,其中 <module></module> 中间的内容为子模块工程名的相对路径。

清单 7. 聚合   controller  --> service --> dao --> pojo 这个就是我们在代码中的依赖关系,在controller注入service,service中注入dao,而dao有需要pojo中的属性值来与数据库交互

 <modules>    

    <module>../com.dugeng.project1</module>

    <module>../com.dugeng.project2</module>

 </modules>

父类型的模块,不需要有源代码和资源文件,也就是说,没有 src/main/java 和 src/test/java 目录。Maven 会首先解析聚合模块的 POM 文件,分析要构建的模块,并通过各模块的依赖关系计算出模块的执行顺序,根据这个潜在的关系依次构建模块。将各子模块聚合到父模块中后,我们就可以对父模块进行一次构建命令来完成全部模块的构建。


Maven 的 setting.xml
        <localRepository>E:\0808\repository</localRepository> jar包下载到哪里(本地仓库)

        <mirror>
          <id>alimaven</id>
          <name>aliyun maven</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
          <mirrorOf>central</mirrorOf>        
        </mirror>                                                  从哪里下载jar(私服或中央仓库)

tomcat插件:

    <build>
        <plugins>
            <!-- 配置Tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <port>8082</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
插一句:聚合工程在聚合之后运行,所以聚合工程的tomcat插件一定是在父工程的pom中配置。


打包 clean package

创建Maven项目时,pom类型的Maven项目有两种,一是作为聚合工程的父工程,还有就是做为专门管理依赖的pom。
                 jar类型的Maven项目就是像那些工具类似的,放的都是各个工程共用的东西,然后被那些war类型的Maven工程依赖即可,
                 war类型的Maven项目就是我们理解纯粹的web工程了,接收用户请求到controller --> service --> dao ,然后响应

因为网络等原因jar包下载下来只有1K,这是可以Maven Update重新下载没有成功的jar

清单8 tomcat热部署
  1>添加tomcat用户,tomcat在conf/tomcat-user.xml文件下添加一个tomcat用户
    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <user username="tomcat" password="123456" roles="manager-gui, manager-script"/>
  2>修改pom中tomcat插件
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
        <url>http://localhost:8080/manager/text</url>
        <username>tomcat</username>
        <password>123456</password>
        </configuration>
    </plugin>    
  3> run as  
     tomcat7:deploy
     项目已有 重发布 tomcat7:redeploy

猜你喜欢

转载自blog.csdn.net/xiayubing_/article/details/81288524