Maven学习笔记二:解决依赖版本问题、部署Maven到Tomcat、分模块开发、私服的上传和下载

1. Maven学习笔记二:解决依赖版本冲突问题、将项目部署到Tomcat服务器中、分模块开发。

1.1. Maven的仓库
  1. 本地仓库
    • 本地上没有就会去远程上找。
  2. 公司远程仓库(私服)
    • 远程上没有,就从中央仓库上找。
  3. 中央仓库(Apache团队维护)
1.2. 添加依赖
  1. 根据需要添加相应依赖

添加依赖

1.3. 依赖版本冲突解决
1.3.1. 四种解决方案
  1. 第一声明优先原则
    • 那个版本写在前面,就默认用哪个版本
<dependencies>
    <!--   spring-beans-4.2.4 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
    <!--   spring-beans-3.0.5 -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-spring-plugin</artifactId>
        <version>2.3.24</version>
    </dependency>
<dependencies>
  1. 路径最近优先原则
    • 添加一个jar包就会依赖传递获取其他包,这些版本低,我们可以在pom.xml再重新声明一个高的版本。这样就会不再依赖低的版本
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.2.4.RELEASE</version>
</dependency>
  1. 排除原则
    • 通过添加排除属性不使用该版本
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-spring-plugin</artifactId>
    <version>2.3.24</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  1. 版本锁定原则
    • 通过锁定版本实现固定版本
<properties>
    <spring.version>4.2.4.RELEASE</spring.version>
    <hibernate.version>5.0.7.Final</hibernate.version>
    <struts.version>2.3.24</struts.version>
</properties>
<!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
1.3.2. pom.xml配置SSH依赖
<project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zhangsan.shop</groupId>
    <artifactId>Shop</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <!-- 属性 -->
    <properties>
        <spring.version>4.2.4.RELEASE</spring.version>
        <hibernate.version>5.0.7.Final</hibernate.version>
        <struts.version>2.3.24</struts.version>
    </properties>

    <!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-core</artifactId>
                <version>${struts.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-spring-plugin</artifactId>
                <version>${struts.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!-- 依赖管理 -->
    <dependencies>
        <!-- spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <!-- hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </dependency>

        <!-- 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>runtime</scope>
        </dependency>
        <!-- c3p0 -->

        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>


        <!-- 导入 struts2 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
        </dependency>

        <!-- servlet jsp -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- 日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.2</version>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
        <!-- jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
    <!-- 局部jdk配置,pom.xml中 -->
    <build>  
        <plugins>  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-compiler-plugin</artifactId>  
                <configuration>  
                    <source>1.8</source>  
                    <target>1.8</target> 
                    <encoding>UTF-8</encoding>
                </configuration>  
            </plugin> 
            <!-- maven内置 的tomcat6插件 -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <version>1.1</version>
                <configuration>
                    <!-- 可以灵活配置工程路径 -->
                    <path>/shop</path>
                    <!-- 可以灵活配置端口号 -->
                    <port>8080</port>
                </configuration>
            </plugin> 
        </plugins>     
    </build> 
</project>
1.4. 从spring容器中获取对象的方法
  • 跟IO的输入输出相似。加载类里面的配置文件。
ApplicationContext app=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
CustomerDao customerDao = (CustomerDao) app.getBean("customerDao");
1.5. 将Maven项目部署到本地Tomcat7服务器
  1. 在maven安装文件的services中添加tomcat7用户名和密码
<server>
    <id>tomcat7</id>
    <username>admin</username>
    <password>password</password>
</server> 
  1. 在tomcat的配置文件中D:\apache-tomcat-7.0.93\conf下的tomcat-users.xml的tomcat-users中配置
    • 别问我为什么,我也不太懂。只不过我按照这个成功了。
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="password" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
  1. 在maven项目的pom.xml中配置tomcat插件
    • 注意:我的是jdk8,tomcat版本应该是7以上版本2.2以上。否则报错。
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <!--  注意此处的url,修改成tomcat监听的端口即可 -->
        <url>http://localhost:8080/manager/html</url>
        <server>tomcat7</server> <!-- 此处的名字必须和setting.xml中配置的ID一致 -->
        <path>/${project.artifactId}</path> <!-- 此处的名字是项目发布的工程名 -->
        <server>tomcat7</server> 
    </configuration>
</plugin>
  1. 运行Maven项目

运行Maven项目

1.6. Maven分模块开发
1.6.1. 建立父模块
  1. 创建父模块

创建父模块

  1. 父模块结构图

父模块结构

1.6.2. 创建dao,service层子模块
  1. 在父模块基础上创建子模块

创建子模块

  1. 子模块创建

子模块创建

  1. 子模块包类型

包类型选择

  1. 将属于该层的类包添加到该层。对于配置文件里不属于该层的配置要删除。
1.6.3. Maven创建测试
  1. 你要测试那个类就要右键点击那个类创建测试。

  2. Maven会自动将测试类创建在测试区。

  3. 分模块开发测试问题scope范围

    service依赖dao,那么这种依赖的范围是scope=compile,如果测试dao时,测试的scope值为test,那么就会service测试人员就无法测试,因为scope为test无法传递依赖。如图:

依赖范围

  • 解决方案是:一将scope改为compile,二自己写一个测试依赖。
1.6.4. 给Maven添加索引
  1. 可以参考文档:添加索引

添加Maven索引

1.6.5. Maven测试类注解方法
  1. 通过注解获取配置文件
@ContextConfiguration(locations= {"classpath*:applicationContext-*.xml"})
  1. 通过注解配置Junit4测试
@RunWith(SpringJUnit4ClassRunner.class)
  1. 自动匹配对象@Autowired
@Autowired
private CustomerService customerService;
  1. 测试@Test
@Test
public void test() {
    Customer customer = customerService.findById(1L);
    System.out.println("********************"+customer.getCustName());
}
1.6.6. 创建web层子模块
  1. 创建时包类型要选择war类型,因为这个是web包,需要配置web.xml

web层子模块

  1. 创建后第一步要配置web.xml
  2. 编写Action,struts.xml,配置applicationContext-action.xml
  3. 修改web.xml中的contextConfigLocation
    • classpath*:表示所有的classpath路径。
    • applicationContext-*:表示所有的applicationContext-下的文件。
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:applicationContext-*.xml</param-value>
</context-param>
1.7. 注意事项
  1. 先创建父模块,并发布到本地仓库中。
  2. 在创建dao模块,创建完成后,就要install一下,发布到本地仓库中
  3. 创建service模块,并进行install
  4. 创建web模块,不需要install,本层可以直接部署到tomcat运行。

2. 私服

2.1. 私服准备工作
  1. 下载nexus私服,安装,启动服务器。
  2. 登录nexus,http://localhost:8081/nexus登录密码:admin/admin123
  3. 仓库类型
    • virtual虚拟仓库
    • proxy代理仓库
    • Hosted宿主仓库,本地仓库
    • Group组(包含Release,Snapshots,3rd party,Central)四项。

私服

  1. 私服的作用:用于分模块开发,比如说:dao层工作人员,将dao打成jar包并上传到私服,然后service开发人员,可以下载dao的jar包。
2.2. 上传
  1. 配置Maven的setting.xml环境
    • 用于配置用户名和密码,以及存放仓库,和私服中的账户和密码一致。
<server>
    <id>releases</id>
    <username>admin</username>
    <password>admin123</password>
</server>
<server>
    <id>snapshots</id>
    <username>admin</username>
    <password>admin123</password>
</server>
  1. 配置項目pom.xml
    • 用于表示上传到那个仓库,上传的链接。
<distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://localhost:8081/nexus/content/repositories/releases/</url>
    </repository> 
    <snapshotRepository>
        <id>snapshots</id>
        <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository> 
</distributionManagement>
  1. 执行deploy命令发布到私服。
2.3. 下载
  1. 配置setting.xml
<profile>   
    <!--profile的id-->
    <id>dev</id>   
    <repositories>   
        <repository>  
            <!--仓库id,repositories可以配置多个仓库,保证id不重复-->
            <id>nexus</id>   
            <!--仓库地址,即nexus仓库组的地址-->
            <url>http://localhost:8081/nexus/content/groups/public/</url>   
            <!--是否下载releases构件-->
            <releases>   
                <enabled>true</enabled>   
            </releases>   
            <!--是否下载snapshots构件-->
            <snapshots>   
                <enabled>true</enabled>   
            </snapshots>   
        </repository>   
    </repositories>  
    <pluginRepositories>  
        <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
        <pluginRepository>  
            <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
            <id>public</id>  
            <name>Public Repositories</name>  
            <url>http://localhost:8081/nexus/content/groups/public/</url>  
        </pluginRepository>  
    </pluginRepositories>  
</profile> 
  1. 激活配置
<activeProfiles>
    <activeProfile>dev</activeProfile>
</activeProfiles>
  1. 删除本地仓库中的dao

  2. update project 就会自动从私服中下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值