• Maven技术


    目录

    传统项目管理分析(导入jar包形式)

    maven组成部分

    maven项目构建命令

    maven高级

    项目的聚合与继承

    maven子父工程

    需求:使用maven子父工程完成登录并跳转到首页列表

    创建父工程

    在父工程中以module的形式创建子模块

    在父工程中以module的形式创建web子模块

    给每个模块添加依赖 

    a、在dao子模块的pom中添加domain子模块的引用关系

    b、在service子模块的pom中添加dao子模块的引用关系

    c、在controller子模块的pom中添加dao子模块的引用关系

     ​编辑d、在父工程的pom中添加ssm所需坐标  

    解决jar包依赖冲突

    依赖冲突

    依赖调解原则

    排除依赖

    锁定版本

    编写模块代码

    a、编写domain模块代码

    b、编写dao模块代码

    c、编写service模块代码

    d、编写controller模块代码

    maven 私服

    搭建maven私服环境

     a、下载 nexus

    b,启动nexus服务器,进入bin 目录

    c、停止私服服务器

    d、查找私服端口

    e、访问私服

    f、nexus仓库类型

    在nexus 上建立两个宿主仓库

    a,新建仓库

    b,选中maven2(hosted)

    c,填写maven仓库名称和类型

    d,添加到maven仓库组

    上传jar到私服

    a,手动上传

    下载私服jar

    a,配置文件

    b,配置权限


    传统项目管理分析(导入jar包形式)

    • jar包不统一,jar包不兼容
    • 工程上线升级维护过程操作繁琐等

    maven组成部分


    • maven本身是一个项目管理工具,将项目开发和管理抽象成一个项目对象模型(POM)
    • POM (project object model) : 项目对象模型

    maven中央仓库地址:https://mvnrepository.com/

    maven项目构建命令


    • mvn compile #编译

    • mvn clean #清理

    • mvn test #测试

    • mvn package #打包

    • mvn install #安装到本地仓库

    maven高级


    • maven工程拆分与聚合思想

    • maven子父工程

    • maven 私服

    项目的聚合与继承


    通常一个项目中聚合和继承是同时使用

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

      聚合目的是:一次构件多个项目

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

      继承目的是:为了消除重复配置

    maven子父工程

    需求:使用maven子父工程完成登录并跳转到首页列表

    创建父工程

     

     

    在父工程中以module的形式创建子模块

     

    注意:以domain方式依次创建 maven-dao, maven-service 子模块 

    在父工程中以module的形式创建web子模块

     

     

     

    给每个模块添加依赖 

    在开发中,service要调用dao中的数据,而web又要调用service的数据,且domain又要被其他三层所调用,他们之间的调用关系如下:web->service->dao->domain

    但是现在四个子工程相互是没有任何关系的,没有关系就不能调用。我们应该将他们之间关联起来

    注意:maven项目之间的引用是通过本地仓库中的jar包进行引用,所以引用前要先将对应的模块打成jar包到本地仓库

    a、在dao子模块的pom中添加domain子模块的引用关系

     

    b、在service子模块的pom中添加dao子模块的引用关系

    c、在controller子模块的pom中添加dao子模块的引用关系

     
    d、在父工程的pom中添加ssm所需坐标  

     

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    5. http://maven.apache.org/xsd/maven-4.0.0.xsd">
    6. <modelVersion>4.0.0modelVersion>
    7. <groupId>cn.woniugroupId>
    8. <artifactId>maven-parentartifactId>
    9. <packaging>pompackaging>
    10. <version>1.0-SNAPSHOTversion>
    11. <modules>
    12. <module>maven-domainmodule>
    13. <module>maven-daomodule>
    14. <module>maven-servicemodule>
    15. <module>maven-webmodule>
    16. modules>
    17. <properties>
    18. <spring.version>5.0.9.RELEASEspring.version>
    19. <mysql.version>8.0.19mysql.version>
    20. <mybatis.version>3.5.1mybatis.version>
    21. properties>
    22. <dependencies>
    23. <dependency>
    24. <groupId>org.mybatisgroupId>
    25. <artifactId>mybatisartifactId>
    26. <version>${mybatis.version}version>
    27. dependency>
    28. <dependency>
    29. <groupId>mysqlgroupId>
    30. <artifactId>mysql-connector-javaartifactId>
    31. <version>${mysql.version}version>
    32. dependency>
    33. <dependency>
    34. <groupId>com.alibabagroupId>
    35. <artifactId>druidartifactId>
    36. <version>1.2.3version>
    37. dependency>
    38. <dependency>
    39. <groupId>junitgroupId>
    40. <artifactId>junitartifactId>
    41. <version>4.12version>
    42. <scope>testscope>
    43. dependency>
    44. <dependency>
    45. <groupId>ch.qos.logbackgroupId>
    46. <artifactId>logback-classicartifactId>
    47. <version>1.2.3version>
    48. dependency>
    49. <dependency>
    50. <groupId>ch.qos.logbackgroupId>
    51. <artifactId>logback-coreartifactId>
    52. <version>1.2.3version>
    53. dependency>
    54. <dependency>
    55. <groupId>org.slf4jgroupId>
    56. <artifactId>slf4j-apiartifactId>
    57. <version>1.7.30version>
    58. dependency>
    59. <dependency>
    60. <groupId>org.springframeworkgroupId>
    61. <artifactId>spring-contextartifactId>
    62. <version>${spring.version}version>
    63. dependency>
    64. <dependency>
    65. <groupId>org.mybatisgroupId>
    66. <artifactId>mybatis-springartifactId>
    67. <version>2.0.1version>
    68. dependency>
    69. <dependency>
    70. <groupId>org.springframeworkgroupId>
    71. <artifactId>spring-jdbcartifactId>
    72. <version>${spring.version}version>
    73. dependency>
    74. <dependency>
    75. <groupId>org.springframeworkgroupId>
    76. <artifactId>spring-testartifactId>
    77. <version>${spring.version}version>
    78. dependency>
    79. <dependency>
    80. <groupId>org.springframeworkgroupId>
    81. <artifactId>spring-aspectsartifactId>
    82. <version>${spring.version}version>
    83. dependency>
    84. <dependency>
    85. <groupId>org.springframeworkgroupId>
    86. <artifactId>spring-txartifactId>
    87. <version>${spring.version}version>
    88. dependency>
    89. <dependency>
    90. <groupId>org.springframeworkgroupId>
    91. <artifactId>spring-webartifactId>
    92. <version>${spring.version}version>
    93. dependency>
    94. dependencies>
    95. <build>
    96. <plugins>
    97. <plugin>
    98. <groupId>org.apache.maven.pluginsgroupId>
    99. <artifactId>maven-compiler-pluginartifactId>
    100. <version>3.5.1version>
    101. <configuration>
    102. <target>1.8target>
    103. <source>1.8source>
    104. <encoding>UTF-8encoding>
    105. configuration>
    106. plugin>
    107. plugins>
    108. <resources>
    109. <resource>
    110. <directory>${basedir}/src/main/javadirectory>
    111. <includes>
    112. <include>**/*.xmlinclude>
    113. includes>
    114. resource>
    115. <resource>
    116. <directory>${basedir}/src/main/resourcesdirectory>
    117. <includes>
    118. <include>**/*.xmlinclude>
    119. <include>**/*.propertiesinclude>
    120. includes>
    121. resource>
    122. resources>
    123. build>
    124. project>

     

    解决jar包依赖冲突

    依赖冲突

    当我们在maven-dao模块添加了如下坐标

    1. <dependency>
    2. <groupId>log4jgroupId>
    3. <artifactId>log4jartifactId>
    4. <version>1.2.14version>
    5. dependency>

    然后在maven-service模块添加了如下坐标

    1. <dependency>
    2. <groupId>log4jgroupId>
    3. <artifactId>log4jartifactId>
    4. <version>1.3.10version>
    5. dependency>

    此时项目中使用的是哪个版本的log4j?此时就产生了依赖冲突,因为service模块要依赖dao模块,但是现在有两个不同版本的jar包

    说明:是否会产生依赖,跟jar坐标的作用域有关

    如果在maven-dao中 jar坐标的作用域设置成test或者provided,此时就不会传递依赖给maven-service了,只有作用域为runtime和默认的compile时会产生传递依赖

    maven scope 取值范围及其作用

    1,compile scope默认值,在工程环境的classpath(编译环境)和打包(如果是WAR包,会包含在WAR包中)时候都有效

    2,provided:容器或JDK已提供范围,表示该依赖包已经由目标容器(如tomcat)和JDK提供,只在编译的classpath中加载和使用,打包的时候不会包含在目标包中。最常见的是j2ee规范相关的servlet-api和jsp-api等jar包,一般由servlet容器提供,无需在打包到war包中,如果不配置为provided,把这些包打包到工程war包中 3,runtime:一般是运行和测试环境使用,编译时候不用加入classpath,打包时候会打包到目标包中。例如JDBC驱动

    4,test:测试范围,一般是单元测试场景使用,在编译环境加入classpath,但打包时不会加入,例如junit

     

    依赖调解原则

    maven 自动按照下边的原则调解:

    1、第一声明者优先原则

    在 pom 文件定义依赖,如果是同级的深度话,以先声明的依赖为准。

    2、路径近者优先原则

    例如:还是上述情况,maven-dao传递过来 log4j,那如果直接把 log4j 的依赖直接写service到 pom 文件中,那么项目就不会再使用其他依赖传递来的log4j,因为自己直接在 pom 中定义 log4j 要比其他依赖传递过来的路径要近。

    排除依赖

    上边的问题也可以通过排除依赖方法辅助依赖调解,如下:

    1. <dependency>
    2. <groupId>com.woniugroupId>
    3. <artifactId>maven-daoartifactId>
    4. <version>1.0-SNAPSHOTversion>
    5. <exclusions>
    6. <exclusion>
    7. <groupId>log4jgroupId>
    8. <artifactId>log4jartifactId>
    9. exclusion>
    10. exclusions>
    11. dependency>

    锁定版本

    面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0modelVersion>
    6. <groupId>com.woniugroupId>
    7. <artifactId>com-woniu-daoartifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. <dependencyManagement>
    10. <dependencies>
    11. <dependency>
    12. <groupId>junitgroupId>
    13. <artifactId>junitartifactId>
    14. <version>4.11version>
    15. <scope>testscope>
    16. dependency>
    17. <dependency>
    18. <groupId>org.mybatisgroupId>
    19. <artifactId>mybatisartifactId>
    20. <version>3.5.6version>
    21. dependency>
    22. <dependency>
    23. <groupId>com.alibabagroupId>
    24. <artifactId>druidartifactId>
    25. <version>1.1.10version>
    26. dependency>
    27. dependencies>
    28. dependencyManagement>
    29. <dependencies>
    30. <dependency>
    31. <groupId>org.mybatisgroupId>
    32. <artifactId>mybatisartifactId>
    33. dependency>
    34. <dependency>
    35. <groupId>com.alibabagroupId>
    36. <artifactId>druidartifactId>
    37. dependency>
    38. <dependency>
    39. <groupId>junitgroupId>
    40. <artifactId>junitartifactId>
    41. <version>4.11version>
    42. <scope>testscope>
    43. dependency>
    44. dependencies>
    45. project>

    还可以把版本号提取出来,使用标签设置成变量。

    1. <properties>
    2. <mybatis.version>3.5.6mybatis.version>
    3. <druid.version>1.1.10druid.version>
    4. properties>

     

    上边添加的依赖并没有指定版本,原因是已在中锁定了版本,所以在下不需要再指定版本 .

    编写模块代码

    a、编写domain模块代码

    实体类编写完成后,由于需要被其他模块直接引用所以要将实体类发布到本地仓库中

     

    b、编写dao模块代码

     

    添加属性文件:db.properties

    1. jdbc.driver=com.mysql.cj.jdbc.Driver
    2. jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
    3. jdbc.username=root
    4. jdbc.password=123456

    添加spring-config-dao.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans
    6. http://www.springframework.org/schema/beans/spring-beans.xsd
    7. http://www.springframework.org/schema/context
    8. http://www.springframework.org/schema/context/spring-context.xsd">
    9. <context:component-scan base-package="cn.woniu.dao">context:component-scan>
    10. <context:property-placeholder location="classpath:db.properties">context:property-placeholder>
    11. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    12. <property name="driverClassName" value="${jdbc.driver}"/>
    13. <property name="url" value="${jdbc.url}"/>
    14. <property name="username" value="${jdbc.username}"/>
    15. <property name="password" value="${jdbc.password}"/>
    16. bean>
    17. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    18. <property name="dataSource" ref="dataSource">property>
    19. <property name="typeAliasesPackage" value="cn.woniu.domain"> property>
    20. <property name="mapperLocations" value="classpath:cn/woniu/mapper/*Dao.xml">property>
    21. bean>
    22. <bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    23. <property name="basePackage" value="cn.woniu.dao">property>
    24. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory">property>
    25. bean>
    26. beans>

     编写userDao.xml 文件

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="cn.woniu.dao.UserDao">
    6. mapper>

     

    c、编写service模块代码

     添加spring-config-service.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:aop="http://www.springframework.org/schema/aop"
    6. xmlns:tx="http://www.springframework.org/schema/tx"
    7. xsi:schemaLocation="http://www.springframework.org/schema/beans
    8. http://www.springframework.org/schema/beans/spring-beans.xsd
    9. http://www.springframework.org/schema/context
    10. http://www.springframework.org/schema/context/spring-context.xsd
    11. http://www.springframework.org/schema/aop
    12. http://www.springframework.org/schema/aop/spring-aop.xsd
    13. http://www.springframework.org/schema/tx
    14. http://www.springframework.org/schema/tx/spring-tx.xsd">
    15. <context:component-scan base-package="cn.woniu.service.impl">context:component-scan>
    16. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    17. <property name="dataSource" ref="dataSource">property>
    18. bean>
    19. <tx:advice id="txadvice" transaction-manager="transactionManager">
    20. <tx:attributes>
    21. <tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
    22. <tx:method name="get*" read-only="true" propagation="SUPPORTS"/>
    23. <tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
    24. <tx:method name="insert*" propagation="REQUIRED">tx:method>
    25. <tx:method name="save*" propagation="REQUIRED">tx:method>
    26. <tx:method name="add*" propagation="REQUIRED">tx:method>
    27. <tx:method name="update*" propagation="REQUIRED">tx:method>
    28. <tx:method name="del*" propagation="REQUIRED">tx:method>
    29. <tx:method name="delete*" propagation="REQUIRED">tx:method>
    30. <tx:method name="*" isolation="DEFAULT"/>
    31. tx:attributes>
    32. tx:advice>
    33. <aop:config proxy-target-class="true">
    34. <aop:pointcut id="pot" expression="execution(* cn.woniu.service.impl.*.*(..))">aop:pointcut>
    35. <aop:advisor advice-ref="txadvice" pointcut-ref="pot">aop:advisor>
    36. aop:config>
    37. beans>

    d、编写controller模块代码

    d1、配置pom.xml 文件

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    5. http://maven.apache.org/xsd/maven-4.0.0.xsd">
    6. <modelVersion>4.0.0modelVersion>
    7. <groupId>cn.woniugroupId>
    8. <artifactId>maven-webartifactId>
    9. <version>1.0-SNAPSHOTversion>
    10. <packaging>warpackaging>
    11. <name>maven-web Maven Webappname>
    12. <url>http://www.example.comurl>
    13. <properties>
    14. <spring.version>5.0.9.RELEASEspring.version>
    15. properties>
    16. <dependencies>
    17. <dependency>
    18. <groupId>cn.woniugroupId>
    19. <artifactId>maven-serviceartifactId>
    20. <version>1.0-SNAPSHOTversion>
    21. dependency>
    22. <dependency>
    23. <groupId>org.springframeworkgroupId>
    24. <artifactId>spring-webmvcartifactId>
    25. <version>${spring.version}version>
    26. dependency>
    27. <dependency>
    28. <groupId>javax.servletgroupId>
    29. <artifactId>servlet-apiartifactId>
    30. <version>2.5version>
    31. <scope>providedscope>
    32. dependency>
    33. <dependency>
    34. <groupId>javax.servlet.jspgroupId>
    35. <artifactId>jsp-apiartifactId>
    36. <version>2.0version>
    37. <scope>providedscope>
    38. dependency>
    39. <dependency>
    40. <groupId>javax.servletgroupId>
    41. <artifactId>jstlartifactId>
    42. <version>1.2version>
    43. dependency>
    44. dependencies>
    45. <build>
    46. <plugins>
    47. <plugin>
    48. <groupId>org.apache.tomcat.mavengroupId>
    49. <artifactId>tomcat7-maven-pluginartifactId>
    50. <version>2.2version>
    51. <configuration>
    52. <path>/path>
    53. <port>8080port>
    54. <uriEncoding>UTF-8uriEncoding>
    55. configuration>
    56. plugin>
    57. plugins>
    58. build>
    59. project>

     

    d2、配置logback.xml

     

    1. "1.0" encoding="UTF-8"?>
    2. <configuration debug="false">
    3. <property name="LOG_PATH" value="${catalina.base}/logs/webapps"/>
    4. <property name="LOG_FILE" value="${LOG_PATH}/spring.log"/>
    5. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    6. <encoder>
    7. <pattern>%d{yyyy-MM-dd HH:mm:ss} %5p | %-40.40logger{39} : %m%npattern>
    8. <charset>utf8charset>
    9. encoder>
    10. appender>
    11. <logger name="cn.woniu" level="DEBUG" additivity="false">
    12. <appender-ref ref="CONSOLE"/>
    13. <appender-ref ref="FILE" />
    14. logger>
    15. <root level="INFO">
    16. <appender-ref ref="CONSOLE" />
    17. <appender-ref ref="FILE" />
    18. root>
    19. configuration>

    d3、配置spring-config.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans
    5. http://www.springframework.org/schema/beans/spring-beans.xsd">
    6. <import resource="classpath*:spring-config-dao.xml" />
    7. <import resource="classpath*:spring-config-service.xml" />
    8. beans>

    d4、配置springmvc-config.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:mvc="http://www.springframework.org/schema/mvc"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans
    7. http://www.springframework.org/schema/beans/spring-beans.xsd
    8. http://www.springframework.org/schema/context
    9. http://www.springframework.org/schema/context/spring-context.xsd
    10. http://www.springframework.org/schema/mvc
    11. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    12. <context:component-scan base-package="cn.woniu.controller">context:component-scan>
    13. <mvc:annotation-driven>mvc:annotation-driven>
    14. <mvc:default-servlet-handler>mvc:default-servlet-handler>
    15. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    16. <property name="prefix" value="/view/">property>
    17. <property name="suffix" value=".jsp">property>
    18. bean>
    19. beans>

    添加web.xml

    1. "1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    4. version="3.0">
    5. <display-name>Archetype Created Web Applicationdisplay-name>
    6. <filter>
    7. <filter-name>characterEncodingFilterfilter-name>
    8. <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    9. <init-param>
    10. <param-name>encodingparam-name>
    11. <param-value>UTF-8param-value>
    12. init-param>
    13. filter>
    14. <filter-mapping>
    15. <filter-name>characterEncodingFilterfilter-name>
    16. <url-pattern>/*url-pattern>
    17. filter-mapping>
    18. <context-param>
    19. <param-name>contextConfigLocationparam-name>
    20. <param-value>classpath*:spring-config-*.xmlparam-value>
    21. context-param>
    22. <listener>
    23. <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    24. listener>
    25. <servlet>
    26. <servlet-name>dispatcherServletservlet-name>
    27. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    28. <init-param>
    29. <param-name>contextConfigLocationparam-name>
    30. <param-value>classpath:springmvc-config.xmlparam-value>
    31. init-param>
    32. <load-on-startup>1load-on-startup>
    33. servlet>
    34. <servlet-mapping>
    35. <servlet-name>dispatcherServletservlet-name>
    36. <url-pattern>/url-pattern>
    37. servlet-mapping>
    38. web-app>

    d5、创建login.jsp页面

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4. <title>登录title>
    5. head>
    6. <body>
    7. <form action="/login" method="post">
    8. <p>帐号:<input type="text" name="account">p>
    9. <p>密码:<input type="text" name="password">p>
    10. <input type="submit" value="登录">
    11. form>
    12. body>
    13. html>

    d6、创建index.jsp页面

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3. <html>
    4. <head>
    5. <title>用户列表title>
    6. head>
    7. <body>
    8. <table border="1" cellpadding="3" cellspacing="0">
    9. <tr>
    10. <th>编号th>
    11. <th>姓名th>
    12. <th>性别th>
    13. <th>生日th>
    14. <th>地址th>
    15. <th>余额th>
    16. tr>
    17. <c:forEach items="${usersList}" var="user">
    18. <tr>
    19. <td>${user.id}td>
    20. <td>${user.userName}td>
    21. <td>${user.sex}td>
    22. <td>${user.birthday}td>
    23. <td>${user.address}td>
    24. <td>${user.money}td>
    25. tr>
    26. c:forEach>
    27. table>
    28. body>
    29. html>

    d7、创建默认页面controller和登录请求controller

    1. /**
    2. * 项目启动默认进入到login.jsp
    3. */
    4. @Controller
    5. public class HelloController {
    6. @RequestMapping("/")
    7. public String hello(){
    8. return "login";
    9. }
    10. }
    1. /**
    2. * 处理登录请求
    3. */
    4. @Controller
    5. public class LoginController {
    6. @Autowired
    7. private UserService userService;
    8. /**
    9. * 接收登录请求
    10. * @param model
    11. * @param account
    12. * @param password
    13. * @return
    14. */
    15. @RequestMapping("/login")
    16. public String getLogin(Model model, HttpServletRequest request,String account, String password){
    17. try{
    18. Users users=userService.getLogin(account, password);
    19. if(users!=null){
    20. //登录成功
    21. request.getSession().setAttribute("user", users);
    22. //重定向到加载主页数据controller
    23. return "redirect:/user/index";
    24. }else{
    25. model.addAttribute("msg", "帐号或密码错误");
    26. }
    27. }catch (Exception e){
    28. e.printStackTrace();
    29. }
    30. return "loign";
    31. }
    32. }

    添加maven 方式启动  

     

    maven 私服

    公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的 maven 远程仓库,每个员工的电脑上安装 maven 软件并且连接私服服务器,员工将自己开发的项目打成 jar 并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。

    私服还充当一个代理服务器,当私服上没有 jar 包会从互联网中央仓库自动下载,如下

     

    搭建maven私服环境

     a、下载 nexus

    Nexus 是 Maven 仓库管理器,通过 nexus 可以搭建 maven 仓库,同时 nexus 还提供强大的仓库管理功能,构件搜索功能等。下载 Nexus, 下载地址Download Archives - Repository Manager 3

     

     

    b,启动nexus服务器,进入bin 目录

    nexus.exe \run nexus 

    c、停止私服服务器

     

    以管理员身份运行命令提示符工具切换到刚解压的私服文件bin目录

    输入停止命令:nexus.exe /stop

    d、查找私服端口

    找到解压目录下的nexus-3.33.0-01-win64\nexus-3.33.0-01\etc\nexus-default.properties

    1. \# nexus访问端口
    2. application-port=8081
    3. \# nexus 主机监听配置(不用修改)
    4. application-host=0.0.0.0
    5. \# nexus 工程目录
    6. nexus-webapp=${bundleBasedir}/nexus
    7. nexus-webapp-context-path=/nexus
    8. \# nexus 的 web 访问路径
    9. nexus-work=${bundleBasedir}/../sonatype-work/nexus
    10. \# nexus 仓库目录
    11. runtime=${bundleBasedir}/nexus/WEB-INF # nexus 运行程序目录

    e、访问私服

    在浏览器中使用url访问私服:http://localhost:8081/

    f、nexus仓库类型

    nexus 的仓库有 4 种类型:

     

     

    1、hosted,宿主仓库,部署自己的 jar 到这个类型的仓库,包括 releases 和 snapshot 两部分,Releases 公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库,hosted仓库只面向公司内部局域网,3rd party为第三方仓库,意思是当局域网内需要网上(不是我们写的包)的第三方包时,先从网上maven官网下载下来,下载某个本地电脑,然后上传到3rd party这个仓库中

    2、proxy,代理仓库,用于代理远程的公共仓库,如 maven 中央仓库,用户连接私服,私服自动去中央仓库下载 jar 包或者插件。当我们的私服没有jar时,去中央仓库下载,下载下来后,全部放到Central这个proxy仓库中,其中Apache Snapshots仓库专门用来存储从apache的中央仓库 中下载下来的

    3、group,仓库组,用来合并多个 hosted/proxy 仓库,通常我们配置自己的 maven 连接仓库组。

    4、virtual(虚拟):兼容 Maven1 版本的 jar 或者插件,基本上用不到了

    在nexus 上建立两个宿主仓库

    a,新建仓库

    b,选中maven2(hosted)

    c,填写maven仓库名称和类型

    d,添加到maven仓库组

     

    上传jar到私服

    a,手动上传

    选中本地jar包,填写内容,勾选Generate a POM file with these coordinates :生成pom 文件

    上传后效果:  

    b,mvn deploy 上传

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

     

    打开本地maven\conf\settings.xml在节点下添加私服登录帐号和密码  

    1. <server>
    2. <id>releasesid>
    3. <username>adminusername>
    4. <password>admin123password>
    5. server>
    6. <server>
    7. <id>snapshotsid>
    8. <username>adminusername>
    9. <password>admin123password>
    10. server>

    在要上传到私服中的项目上配置上传路径,在ssm项目的父工程pom.xml中添加如下配置

    1. <distributionManagement>
    2. <repository>
    3. <id>releasesid>
    4. <name>maven-releasesname>
    5. <url>http://localhost:8081/repository/maven-releases/url>
    6. repository>
    7. <snapshotRepository>
    8. <id>snapshotsid>
    9. <name>maven-snapshotsname>
    10. <url>http://localhost:8081/repository/maven-snapshots/url>
    11. snapshotRepository>
    12. distributionManagement>

    注意:pom.xml这里id和settings.xml配置id对应!并且要配置在坐标上面否则会报错 

     

    将项目中的jar包上传到私服

     

     

    下载私服jar

    没有配置 nexus 之前,如果本地仓库没有,去中央仓库下载,通常在企业中会在局域网内部署一台私服服务器,有了私服本地项目首先去本地仓库找 jar,如果没有找到则连接私服从私服下载 jar 包,如果私服没有 jar 包私服同时作为代理服务器从中央仓库下载 jar 包,

    这样做的好处是一方面由私服对公司项目的依赖 jar 包统一管理,一方面提高下载速度项目连接私服下载 jar 包的速度要比项目连接中央仓库的速度快的多。

    本例子测试从私服下载maven-dao包

     

    1. <profiles>
    2. <profile>
    3. <id>devid>
    4. <repositories>
    5. <repository>
    6. <id>nexusid>
    7. <url>http://localhost:8081/repository/maven-public/url>
    8. <releases>
    9. <enabled>trueenabled>
    10. releases>
    11. <snapshots>
    12. <enabled>trueenabled>
    13. snapshots>
    14. repository>
    15. repositories>
    16. <pluginRepositories>
    17. <pluginRepository>
    18. <id>publicid>
    19. <name>Public Repositoriesname>
    20. <url>http://localhost:8081/repository/maven-public/url>
    21. pluginRepository>
    22. pluginRepositories>
    23. profile>
    24. profiles>

    找到maven本地仓库中项目的打包地址,将maven-dao删除 ​​​​​​​​​​​​​​ 

    发布项目,发现提示找不到maven-dao.jar ​​​​​​​ 

    a,配置文件

    配置本地maven的settings.xml,设置从私服下载jar

    b,配置权限

     

    重新发布项目将会自动下载maven-dao包  

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    95- 后程序员一出校门就拿年薪 -30 多万?,android 开发文档百度云
    大数据 DataX 数据同步数据分析入门
    迷宫问题(只有一条路径)【dfs 判断是否继续dfs 的三种方法】
    270_JSON_设置xxxValue为一个JSON对象类型且复制上一层value数据到xxxValue中
    华为云云耀云服务器L实例评测|云耀云服务器L实例部署paperless-ngx文档管理系统
    三代自动驾驶系统及主流科技公司自动驾驶技术方案简介
    牛客--汽水瓶python
    Python之“诗词大会”游戏
    STM32之USART2 DMA通信
    xxl-job中多节点分片的时候如何在linux服务器开启多个执行器实例?
  • 原文地址:https://blog.csdn.net/magic_818/article/details/128184494