maven应用、maven私服搭建教程!

maven应用、maven私服搭建教程!

  • Maven高级
    • 大纲
      • 第1章 介绍
        • 1.1 Maven好处
        • 1.2 安装配置 maven
        • 1.3 三种仓库
        • 1.4 常见的命令
        • 1.5 坐标的书写规范
        • 1.6 如何添加坐标
        • 1.7 依赖范围
      • 第2章Maven
        • 2.1 jar包冲突:第一声明优先原则
        • 2.2 jar包冲突:路径近者优先原则
        • 2.3 jar包冲突:直接排除法
      • 第2章 工程分层
        • 2.1 items-parent
          • 2.1.1pom.xml
        • 2.2 items-model
        • 2.3 items-dao
          • 2.2.1 pom.xml
          • 2.2.2 spring-dao.xml
          • 2.2.3 ItemsMapper.xml
          • 2.2.4 ItemsMapper.java
        • 2.3 items-service
          • 2.3.1 pom.xml
          • 2.3.2 spring-service.xml
          • 2.3.4 ItemsServiceImpl
        • 2.4 items-web
          • 2.4.1 pom.xml
          • 2.4.2 web.xml
          • 2.4.3 springmvc.xml
          • 2.4.4 ItemsController
      • 第3章 maven 私服[了解]
        • 3.1需求
        • 3.2 分析
        • 3.3 搭建私服环境
          • 3.3.1 下载 nexus
          • 3.3.2 安装 nexus
          • 3.3.3 卸载 nexus
          • 3.3.4 启动 nexus
          • 3.3.5 仓库类型
        • 3.4 将项目发布到私服
          • 3.4.1 需求
          • 3.4.2 配置
          • 3.4.3 测试
        • 3.5 从私服下载 jar 包
          • 3.5.1 需求
          • 3.5.2 管理仓库组
          • 3.5.3 在 setting.xml 中配置仓库
          • 3.5.4 测试从私服下载 jar 包
      • 第4章 把第三方 jar 包放入本地仓库或私服
        • 4.1 导入本地库
        • 4.2 导入私服
        • 4.3 参数说明

Maven高级

大纲

第1章 介绍

1.1 Maven好处

  1. 节省磁盘空间
  2. 可以一键构建
  3. 可以跨平台
  4. 应用在大型项目时可以提高开发效率

1.2 安装配置 maven

注意: 3.3+版本需要 jdkj.7+以上的支持

1.3 三种仓库

  1. 本地仓库
  2. 远程仓库(私服)
  3. 中央仓库

1.4 常见的命令

  1. Compile
  2. Test
  3. Package
  4. Install
  5. Deploy
  6. Clean

1.5 坐标的书写规范

  1. groupId 公司或组织域名的倒序
  2. artifactId 项目名或模块名
  3. version 版本号

1.6 如何添加坐标

  1. 在本地仓库中搜索
  2. 互联网上搜,推荐网址 http://www.mvnrepository.com/

1.7 依赖范围

  1. Compile
  2. Test
  3. Runtime
  4. Provided

第2章Maven

创建一个war包工程

2.1 jar包冲突:第一声明优先原则

哪个jar包在靠上的位置,这个jar包就是先声明的,先声明的jar包下的依赖包,可以优先引入项目中。

我们在pom.xml中引入如下坐标,分别是spring中不同的版本。


<dependencies>
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>5.0.2.RELEASEversion>
    dependency>

    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-beansartifactId>
        <version>4.2.4.RELEASEversion>
    dependency>
dependencies>

我们在控制面板的maven面板,点击查看依赖关系按钮,看到了包和包之间的依赖关系存在冲突,都使用了spring-core包,关系图如下:

maven应用、maven私服搭建教程!_第1张图片

我们再来看看他们依赖包的导入,发现导入的包却没有问题,包使用的都是5.0.2的版本。

maven应用、maven私服搭建教程!_第2张图片

我们把上面2个包的顺序调换后就变成了低版本的依赖导入。

maven应用、maven私服搭建教程!_第3张图片

2.2 jar包冲突:路径近者优先原则

直接依赖比传递依赖路径近,你那么最终进入项目的jar包会是路径近的直接依赖包。

直接依赖:项目中直接导入的jar包就是项目的直接依赖包。

传递依赖:项目中没有直接导入的jar包,可以通过中直接依赖包传递到项目中去。

修改jar包,字节引入依赖spring-core

<dependencies>
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-beansartifactId>
        <version>4.2.4.RELEASEversion>
    dependency>

    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>5.0.2.RELEASEversion>
    dependency>

    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-coreartifactId>
        <version>4.2.8.RELEASEversion>
    dependency>
dependencies>

此时优先引入的是直接依赖的引用

maven应用、maven私服搭建教程!_第4张图片

2.3 jar包冲突:直接排除法

当我们需要排除某个jar包的依赖时,在配置exclusions标签的时候,内部可以不写版本号。pom.xml依赖如下:


<dependencies>
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-beansartifactId>
        <version>4.2.4.RELEASEversion>
        
        <exclusions>
            <exclusion>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-coreartifactId>
            exclusion>
        exclusions>
    dependency>

    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>5.0.2.RELEASEversion>
    dependency>
dependencies>

依赖导入的jar包如下

maven应用、maven私服搭建教程!_第5张图片

第2章 工程分层

maven应用、maven私服搭建教程!_第6张图片

  • 理解继承和聚合

通常继承和聚合同时使用。

  • 何为继承?

继承是为了消除重复,如果将 dao、 service、 web 分开创建独立的工程则每个工程的 pom.xml 文件中的内容存在重复,比如:设置编译版本、锁定 spring 的版本的等,可以将这些重复的 配置提取出来在父工程的 pom.xml 中定义。

  • 何为聚合?

项目开发通常是分组分模块开发, 每个模块开发完成要运行整个工程需要将每个模块聚合在 一起运行,比如: dao、 service、 web 三个工程最终会打一个独立的 war 运行。

2.1 items-parent

2.1.1pom.xml

<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.0modelVersion>
    <groupId>com.lovejavagroupId>
    <artifactId>items-parentartifactId>
    <version>1.0-SNAPSHOTversion>
    <modules>
        <module>../items-daomodule>
        <module>../items-modelmodule>
        <module>../items-servicemodule>
        <module>../items-webmodule>
    modules>
    <packaging>pompackaging>

    <properties>
        <spring.version>5.0.2.RELEASEspring.version>
        <slf4j.version>1.6.6slf4j.version>
        <log4j.version>1.2.12log4j.version>
        <mysql.version>5.1.6mysql.version>
        <mybatis.version>3.4.5mybatis.version>
        <aspectjweaver.version>1.6.8aspectjweaver.version>
        <junit.version>4.12junit.version>
        <jsp-api.version>2.0jsp-api.version>
        <servlet-api.version>2.5servlet-api.version>
        <jstl.version>1.2jstl.version>
        <mybatis-spring.version>1.3.0mybatis-spring.version>
        <druid.version>1.0.9druid.version>
        
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
    properties>

    
    <dependencyManagement>
        
        <dependencies>
            
            <dependency>
                <groupId>org.aspectjgroupId>
                <artifactId>aspectjweaverartifactId>
                <version>${aspectjweaver.version}version>
            dependency>

            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-aopartifactId>
                <version>${spring.version}version>
            dependency>

            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-contextartifactId>
                <version>${spring.version}version>
            dependency>

            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-webmvcartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-webartifactId>
                <version>${spring.version}version>
            dependency>

            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-jdbcartifactId>
                <version>${spring.version}version>
            dependency>
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-txartifactId>
                <version>${spring.version}version>
            dependency>

            
            <dependency>
                <groupId>javax.servletgroupId>
                <artifactId>servlet-apiartifactId>
                <version>${servlet-api.version}version>
                <scope>providedscope>
            dependency>

            <dependency>
                <groupId>javax.servlet.jspgroupId>
                <artifactId>jsp-apiartifactId>
                <version>${jsp-api.version}version>
                <scope>providedscope>
            dependency>

            
            <dependency>
                <groupId>jstlgroupId>
                <artifactId>jstlartifactId>
                <version>${jstl.version}version>
            dependency>

            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>${mysql.version}version>
            dependency>

            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-testartifactId>
                <version>${spring.version}version>
            dependency>

            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>${junit.version}version>
                <scope>compilescope>
            dependency>


            
            <dependency>
                <groupId>log4jgroupId>
                <artifactId>log4jartifactId>
                <version>${log4j.version}version>
            dependency>

            <dependency>
                <groupId>org.slf4jgroupId>
                <artifactId>slf4j-apiartifactId>
                <version>${slf4j.version}version>
            dependency>

            <dependency>
                <groupId>org.slf4jgroupId>
                <artifactId>slf4j-log4j12artifactId>
                <version>${slf4j.version}version>
            dependency>
            

            
            <dependency>
                <groupId>org.mybatisgroupId>
                <artifactId>mybatisartifactId>
                <version>${mybatis.version}version>
            dependency>

            
            <dependency>
                <groupId>org.mybatisgroupId>
                <artifactId>mybatis-springartifactId>
                <version>${mybatis-spring.version}version>
            dependency>

            
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druidartifactId>
                <version>${druid.version}version>
            dependency>
        dependencies>
    dependencyManagement>


    <build>
        <pluginManagement>
            
            <plugins>
                
                <plugin>
                    <groupId>org.apache.tomcat.mavengroupId>
                    <artifactId>tomcat7-maven-pluginartifactId>
                    <version>2.2version>
                    
                    <configuration>
                        
                        <port>18081port>
                        
                        <path>/path>
                        
                        <uriEncoding>UTF-8uriEncoding>
                    configuration>
                plugin>
            plugins>
        pluginManagement>
    build>
project>

2.2 items-model

创建Items即可

public class Items {

    private Integer id;
    private String name;
    private Float price;
    private String pic;
    private Date createtime;
    private String detail;
	//get..set..
}

2.3 items-dao

2.2.1 pom.xml

<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">
    <parent>
        <artifactId>items-parentartifactId>
        <groupId>com.lovejavagroupId>
        <version>1.0-SNAPSHOTversion>
        <relativePath>../items-parent/pom.xmlrelativePath>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>items-daoartifactId>

    
    <dependencies>
        
        <dependency>
            <groupId>com.lovejavagroupId>
            <artifactId>items-modelartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>

        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
        dependency>

        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatis-springartifactId>
        dependency>

        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
        dependency>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jdbcartifactId>
        dependency>

        
        <dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
        dependency>

        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-apiartifactId>
        dependency>

        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-log4j12artifactId>
        dependency>
        
    dependencies>

project>
2.2.2 spring-dao.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">


    
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/maven?characterEncoding=utf8" />
        <property name="username" value="root" />
        <property name="password" value="root" />
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    bean>

    
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="typeAliasesPackage" value="com.lovejava.model" />
        <property name="mapperLocations">
            <list>
                <value>classpath:com/lovejava/mapper/*Mapper.xmlvalue>
            list>
        property>
        <property name="dataSource" ref="dataSource" />
    bean>

    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
              p:basePackage="com.lovejava.mapper"
              p:sqlSessionFactoryBeanName="sqlSessionFactoryBean" />

beans>
2.2.3 ItemsMapper.xml

        

<mapper namespace="com.lovejava.mapper.ItemsMapper">

    
    <select id="getById" parameterType="int" resultType="Items">
      select * from items where id=#{id}
    select>
mapper>
2.2.4 ItemsMapper.java
public interface ItemsMapper {
    Items getById(Integer id);
}

2.3 items-service

2.3.1 pom.xml

<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">
    <parent>
        <artifactId>items-parentartifactId>
        <groupId>com.lovejavagroupId>
        <version>1.0-SNAPSHOTversion>
        <relativePath>../items-parent/pom.xmlrelativePath>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>items-serviceartifactId>

    
    <dependencies>
        
        <dependency>
            <groupId>com.lovejavagroupId>
            <artifactId>items-daoartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>

        
        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjweaverartifactId>
        dependency>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aopartifactId>
        dependency>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
        dependency>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-txartifactId>
        dependency>
    dependencies>

project>
2.3.2 spring-service.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:cache="http://www.springframework.org/schema/cache"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/cache
        http://www.springframework.org/schema/cache/spring-cache.xsd">

    
    <tx:advice id="txAdvice" transaction-manager="txManager">
        
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT"
                       rollback-for="java.lang.Exception" />
            <tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"
                       rollback-for="java.lang.Exception" />
            <tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT"
                       rollback-for="java.lang.Exception" />
            <tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT"
                       rollback-for="java.lang.Exception" />
            <tx:method name="modify*" propagation="REQUIRED" isolation="DEFAULT"
                       rollback-for="java.lang.Exception" />
            <tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT"
                       rollback-for="java.lang.Exception" />

            
            <tx:method name="query*" read-only="true" />
            <tx:method name="select*" read-only="true" />
            <tx:method name="find*" read-only="true" />
        tx:attributes>
    tx:advice>

    
    <bean id="txManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    bean>


    
    <aop:config>
        <aop:pointcut expression="execution(* com.lovejava.service.impl.*.*(..))"
                      id="tranpointcut" />
        
        <aop:advisor advice-ref="txAdvice" pointcut-ref="tranpointcut" />
    aop:config>


    
    <import resource="spring-dao.xml" />

beans>

2.3.3 ItemsService接口

public interface ItemsService {
    Items getById(Integer id);
}
2.3.4 ItemsServiceImpl
@Service
public class ItemsServiceImpl implements ItemsService {

    @Autowired
    private ItemsMapper itemsMapper;

    @Override
    public Items getById(Integer id) {
        return itemsMapper.getById(id);
    }
}

2.4 items-web

2.4.1 pom.xml

<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">
    <parent>
        <artifactId>items-parentartifactId>
        <groupId>com.lovejavagroupId>
        <version>1.0-SNAPSHOTversion>
        <relativePath>../items-parent/pom.xmlrelativePath>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>items-webartifactId>

    
    <packaging>warpackaging>

    <dependencies>
        
        <dependency>
            <groupId>com.lovejavagroupId>
            <artifactId>items-serviceartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>


        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webartifactId>
        dependency>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
        dependency>



        
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>servlet-apiartifactId>
            <scope>providedscope>
        dependency>

        <dependency>
            <groupId>javax.servlet.jspgroupId>
            <artifactId>jsp-apiartifactId>
            <scope>providedscope>
        dependency>

        <dependency>
            <groupId>jstlgroupId>
            <artifactId>jstlartifactId>
        dependency>
    dependencies>


    <build>
        
        <plugins>
            
            <plugin>
                <groupId>org.apache.tomcat.mavengroupId>
                <artifactId>tomcat7-maven-pluginartifactId>
                <version>2.2version>
                
                <configuration>
                    
                    <port>18081port>
                    
                    <path>/path>
                    
                    <uriEncoding>UTF-8uriEncoding>
                configuration>
            plugin>
        plugins>
    build>

project>
2.4.2 web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    
    <filter>
        <filter-name>characterEncodingfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>

        <init-param>
            <param-name>encodingparam-name>
            <param-value>UTF-8param-value>
        init-param>

        <init-param>
            <param-name>forceEncodingparam-name>
            <param-value>trueparam-value>
        init-param>
    filter>

    <filter-mapping>
        <filter-name>characterEncodingfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>
    


    
    <servlet>
        <servlet-name>springmvcservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>

        <init-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:springmvc.xmlparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
    servlet>


    <servlet-mapping>
        <servlet-name>springmvcservlet-name>
        <url-pattern>*.shtmlurl-pattern>
    servlet-mapping>
    
web-app>
2.4.3 springmvc.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">

    
    <context:component-scan base-package="com.lovejava" />

    
    <mvc:annotation-driven />

    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/" />
        <property name="suffix" value=".jsp" />
    bean>


    
    <import resource="spring-service.xml"/>
    <import resource="spring-dao.xml"/>

beans>
2.4.4 ItemsController
@Controller
@RequestMapping(value = "/items")
public class ItemsController {

    @Autowired
    private ItemsService itemsService;

    /***
     * 根据ID查询
     * @param id
     * @param model
     * @return
     */
    @RequestMapping(value = "/one")
    public String getById(Integer id, Model model){
        Items items = itemsService.getById(id);
        model.addAttribute("items",items);
        return "items";
    }
}

第3章 maven 私服[了解]

3.1需求

正式开发,不同的项目组开发不同的工程。
ssm-dao 工程开发完毕,发布到私服。

ssm-service 从私服下载 dao。

3.2 分析

公司在自己的局域网内搭建自己的远程仓库服务器,称为私服, 私服服务器即是公司内部的 maven 远程仓库, 每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自
己开发的项目打成 jar 并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。私服还充当一个代理服务器,当私服上没有 jar 包会从互联网中央仓库自动下载,如下图:

maven应用、maven私服搭建教程!_第7张图片

3.3 搭建私服环境

3.3.1 下载 nexus

Nexus 是 Maven 仓库管理器, 通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强大的仓库管理功能,构件搜索功能等。
下载 Nexus, 下载地址:https://www.sonatype.com/download-oss-sonatype

在这里插入图片描述

我使用nexus-2.12.0-01-bundle.zip的nexus版本。

3.3.2 安装 nexus

解压 nexus-2.12.0-01-bundle.zip,本教程将它解压在 F 盘,进入 bin 目录:

maven应用、maven私服搭建教程!_第8张图片

cmd 进入 bin 目录,执行 nexus.bat install

在这里插入图片描述

安装成功在服务中查看有 nexus 服务:

在这里插入图片描述

3.3.3 卸载 nexus

cmd 进入 nexus 的 bin 目录,执行: nexus.bat uninstall

在这里插入图片描述

查看 window 服务列表 nexus 已被删除。

3.3.4 启动 nexus

方法 1:
cmd 进入 bin 目录,执行 nexus.bat start
方法 2:
直接启动 nexus 服务

在这里插入图片描述

查看 nexus 的配置文件 conf/nexus.properties

maven应用、maven私服搭建教程!_第9张图片

# Jetty section
application-port=8081 # nexus 的访问端口配置
application-host=0.0.0.0 # nexus 主机监听配置(不用修改)
nexus-webapp=${bundleBasedir}/nexus # nexus 工程目录
nexus-webapp-context-path=/nexus # nexus 的 web 访问路径
# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus # nexus 仓库目录
runtime=${bundleBasedir}/nexus/WEB-INF # nexus 运行程序目录

访问: http://localhost:8081/nexus/

maven应用、maven私服搭建教程!_第10张图片

使用 Nexus 内置账户 admin/admin123

登陆: 点击右上角的 Log in,输入账号和密码 登陆

maven应用、maven私服搭建教程!_第11张图片

登陆成功:

maven应用、maven私服搭建教程!_第12张图片

3.3.5 仓库类型

nexus 查看

nexus 的仓库:

maven应用、maven私服搭建教程!_第13张图片

nexus 的仓库有 4 种类型:

maven应用、maven私服搭建教程!_第14张图片

1. hosted,宿主仓库, 部署自己的 jar 到这个类型的仓库,包括 releases 和 snapshot 两部分, Releases 公司内部发布版本仓库、 Snapsh![o](https://img-blog.csdnimg.cn/20190419090737843.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dpbHNvbjI3,size_16,color_FFFFFF,t_70)ts 公司内部测试版本仓库
2. proxy,代理仓库, 用于代理远程的公共仓库,如 maven 中央仓库,用户连接私服,私服自动去中央仓库下载 jar 包或者插件。
3. group,仓库组,用来合并多个 hosted/proxy 仓库,通常我们配置自己的 maven 连接仓库组。
4. virtual(虚拟):兼容 Maven1 版本的 jar 或者插件

nexus 仓库默认在 sonatype-work 目录中:

maven应用、maven私服搭建教程!_第15张图片

central:代理仓库, 代理中央仓库

maven应用、maven私服搭建教程!_第16张图片

  • apache-snapshots:代理仓库

​ 存储 snapshots 构件,代理地址 https://repository.apache.org/snapshots/

  • central-m1: virtual 类型仓库, 兼容 Maven1 版本的 jar 或者插件
  • releases: 本地仓库,存储 releases 构件。
  • snapshots: 本地仓库,存储 snapshots 构件。
  • thirdparty:第三方仓库
  • public:仓库组

3.4 将项目发布到私服

3.4.1 需求

企业中多个团队协作开发通常会将一些公用的组件、开发模块等发布到私服供其它团队或模块开发人员使用。
本例子假设多团队分别开发 ssm_dao、 ssm_service、 ssm_web,某个团队开发完在ssm_dao 会将 ssm_dao 发布到私服供 ssm_service 团队使用,本例子会将 ssm_dao 工程打成
jar 包发布到私服。

maven应用、maven私服搭建教程!_第17张图片

3.4.2 配置

第一步: 需要在客户端即部署 ssm_dao 工程的电脑上配置 maven环境,并修改 settings.xml文件, 配置连接私服的用户和密码 。
此用户名和密码用于私服校验,因为私服需要知道上传的账号和密码是否和私服中的账号和密码一致。

<--配置链接私服的账号和密码-->
<server>
	<id>releasesid>
	<username>adminusername>
	<password>admin123password>
server>
<server>
	<id>snapshotsid>
	<username>adminusername>
	<password>admin123password>
server>

releases 连接发布版本项目仓库

snapshots 连接测试版本项目仓库

在这里插入图片描述

第二步: 配置项目 pom.xml
配置私服仓库的地址,本公司的自己的 jar 包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为 release 则上传到私服的 release 仓库,如果版本为snapshot 则上传到私服的 snapshot 仓库


<distributionManagement>
	<repository>
		<id>releasesid>
		<url>http://localhost:8081/nexus/content/repositories/releases/url>
	repository>
	<snapshotRepository>
		<id>snapshotsid>
		<url>http://localhost:8081/nexus/content/repositories/snapshots/url>
	snapshotRepository>
distributionManagement>

注意: pom.xml 这里< id > 和 settings.xml 配置 < id > 对应!

3.4.3 测试

将项目 dao 工程打成 jar 包发布到私服:

1、 首先启动 nexus

2、 对 ssm-dao 工程执行 deploy 命令

maven应用、maven私服搭建教程!_第18张图片

根据本项目pom.xml中version定义决定发布到哪个仓库,如果version定义为snapshot,执行 deploy后查看 nexus 的 snapshot仓库, 如果 version定义为 release则项目将发布到 nexus的 release 仓库,本项目将发布到 snapshot 仓库:

maven应用、maven私服搭建教程!_第19张图片

也可以通过 http 方式查看:

maven应用、maven私服搭建教程!_第20张图片

3.5 从私服下载 jar 包

3.5.1 需求

没有配置 nexus 之前,如果本地仓库没有,去中央仓库下载,通常在企业中会在局域网内部署一台私服服务器, 有了私服本地项目首先去本地仓库找 jar,如果没有找到则连接私服从私服下载 jar 包,如果私服没有 jar 包私服同时作为代理服务器从中央仓库下载 jar 包,这样做的好处是一方面由私服对公司项目的依赖 jar 包统一管理,一方面提高下载速度, 项目连接私服下载 jar 包的速度要比项目连接中央仓库的速度快的多。
本例子测试从私服下载 ssm_dao 工程 jar 包。

3.5.2 管理仓库组

nexus中包括很多仓库, hosted中存放的是企业自己发布的jar包及第三方公司的jar包,proxy 中存放的是中央仓库的 jar,为了方便从私服下载 jar 包可以将多个仓库组成一个仓库组,每个工程需要连接私服的仓库组下载 jar 包。
打开 nexus 配置仓库组,如下图:

maven应用、maven私服搭建教程!_第21张图片

上图中仓库组包括了本地仓库、代理仓库等。

3.5.3 在 setting.xml 中配置仓库

在客户端的 setting.xml 中配置私服的仓库,由于 setting.xml 中没有 repositories 的配置标签需要使用 profile 定义仓库。


<profile> 
	
	<id>devid>
	<repositories>
		<repository> 
            
			<id>nexusid> 
            
			<url>http://localhost:8081/nexus/content/groups/public/url> 
            
			<releases>
				<enabled>trueenabled>
			releases>
            
			<snapshots>
				<enabled>trueenabled>
			snapshots>
		repository>
	repositories>
	<pluginRepositories>
        
		<pluginRepository> 
            
			<id>publicid>
			<name>Public Repositoriesname>
			<url>http://localhost:8081/nexus/content/groups/public/url>
		pluginRepository>
	pluginRepositories>
profile>

使用 profile 定义仓库需要激活才可生效。

<activeProfiles>
	<activeProfile>devactiveProfile>
activeProfiles>

配置成功后通过 IDEA查看有效 pom,有效 pom 是 maven 软件最终使用的 pom 内容,程序员不直接编辑有效 pom,打开有效 pom.

3.5.4 测试从私服下载 jar 包

测试 1:局域网环境或本地网络即可
在 ssm-service 工程中添加以上配置后,添加 ssm-dao 工程的依赖,删除本地仓库中 ssm-dao工程,同时在idea中关闭 ssm-dao 工程。
观察控制台:

项目先从本地仓库找 ssm_dao,找不到从私服找,由于之前执行 deploy 将 ssm_dao 部署到私服中,所以成功从私服下载 ssm_dao 并在本地仓库保存一份。
如果此时删除私服中的 ssm_dao,执行 update project 之后是否正常?
如果将本地仓库的 ssm_dao 和私服的 ssm_dao 全部删除是否正常?
测试 2:需要互联网环境
在项目的 pom.xml 添加一个依赖,此依赖在本地仓库和私服都不存在, maven 会先从本地仓库找,本地仓库没有再从私服找,私服没有再去中央仓库下载, jar 包下载成功在私服、
本地仓库分别存储一份。

第4章 把第三方 jar 包放入本地仓库或私服

4.1 导入本地库

随便找一个 jar 包测试, 可以先 CMD进入到 jar 包所在位置,运行

mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile= fastjson-1.1.37.jar -Dpackaging=jar

maven应用、maven私服搭建教程!_第22张图片

maven应用、maven私服搭建教程!_第23张图片

4.2 导入私服

需要在 maven 软件的核心配置文件 settings.xml 中配置第三方仓库的 server 信息

<server>
	<id>thirdpartyid>
	<username>adminusername>
	<password>admin123password>
server>

才能执行以下命令

mvn deploy:deploy-file -DgroupId=com.alimama -DartifactId=fastjsonmm -Dversion=1.1.37 -Dpackaging=jar -Dfile=D:/fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty

maven应用、maven私服搭建教程!_第24张图片
maven应用、maven私服搭建教程!_第25张图片

4.3 参数说明

DgroupId 和 DartifactId 构成了该 jar 包在 pom.xml 的坐标,项目就是依靠这两个属性定位。
自己起名字也行。
Dfile 表示需要上传的 jar 包的绝对路径。
Durl 私服上仓库的位置,打开 nexus——>repositories 菜单,可以看到该路径。
DrepositoryId 服务器的表示 id,在 nexus 的 configuration 可以看到。
Dversion 表示版本信息,
关于 jar 包准确的版本:
包的名字上一般会带版本号,如果没有那可以解压该包,会发现一个叫 MANIFEST.MF 的文件,这个文件就有描述该包的版本信息。
比如 Specification-Version: 2.2 可以知道该包的版本了。
上传成功后,在 nexus 界面点击 3rd party 仓库可以看到这包。

你可能感兴趣的:(SSM,maven,maven高级,maven私服)