maven怎么做版本控制器(建议收藏)

maven怎么做版本控制器(建议收藏)

上次发布一篇类似的文章,但是这次我补充了一些内容。

一、dependency相关配置

1.1、scope

test:只在测试时使用,打包时不用。

import:单继承。只能用在dependencyManagement里面,且仅用于type=pomdependency

1.2、type

dependency为什么会有type为pom,默认的值是什么?
dependency中type默认为jar即引入一个特定的jar包。那么为什么还会有type为pom呢?当我们需要引入很多jar包的时候会导致pom.xml过大,我们可以想到的一种解决方案是定义一个父项目,但是父项目只有一个,也有可能导致父项目的pom.xml文件过大。这个时候我们引进来一个type为pom,意味着我们可以将所有的jar包打包成一个pom,然后我们依赖了pom,即可以下载下来所有依赖的jar包。

二、dependencyManagement

间接依赖,主要作用是用来管理依赖。可以被继承,如果在这个元素中引入的依赖不会被加载进来,只有其他工程引入这个依赖之后才会被引入。一般用于父pom.xml中,而子工程dependency元素在依赖。

三、创建版本控制器

实现效果,我要向springboot版本控制器那样,只需要依赖我的这个版本控制器,就不用再依赖springbootspringcloud以及springcloudalibaba这些版本控制器了。在父工程引入我的这个依赖,在工程依赖部分模块实现相应的功能。就很好的避免重复的写同样的功能,只需要一个依赖就实现相同的功能了。

这样做的好处是。

1、如果自己很多项目需要实现相同的功能,那么我们只需要写一套代码,install到本地仓库或者私服里面,其他项目一个依赖就可以。

2、不用项目都需要去引用一大堆依赖,某个依赖更新时,设计的再好,只好每个项目需要在父工程中更改一次。就意味着项目更新比较麻烦,如果实现自定义版本控制器后,就可以向springboot版本控制器那样很好的管理版本,今后代码只维护一套,所有项目就得到解决。

这也是我策划已久的项目,也是我设计失败了三四个项目后取得的成就。

写法和普通多模块项目一样的,其他项目引入时采用springboot版本控制器的方式引入就可以了。

3.1、父pom.xml设计

在父pom.xml中,必须将packaging设置为pom,默认为jar。子工程需要设置为jar,但是默认就是jar,我们就可以忽略。

在这里插入图片描述

dependencies标签说明

dependencies标签中引入的依赖,每个子工程中也就自动继承了这里的依赖。所以只要在这个标签中引入的依赖,maven会将这个标签中的依赖加载到项目中,每个子模块不用再依赖就直接使用。

在这里插入图片描述

dependencyManagement标签说明

这个标签一般使用在父pom.xml中,在这个标签中引入的依赖,不会加载进来,在这里将依赖写好,版本号定义好。子模块引用这里面的依赖时,就避免写版本号了,只要子工程依赖,这里的依赖才会加载到项目中。所以这个标签一般用于版本控制,为了好维护版本号。

在这里插入图片描述

3.2、插件

安装一下两个插件,第一个是指定JDK版本。第二个是打包插件。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!--springboot 打包插件-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

如果某个子工程直接打成jar直接运行的,那么会遇见一下错误。

java -jar XXX.jar中没有主清单属性,建议收藏。

参考博客:https://blog.csdn.net/qq_41853447/article/details/107288874

需要在需要运行的这个子工程中在添加以下插件,在插件中指定main方法的路径。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.2.2.RELEASE</version>
            <configuration>
                <!-- main方法的地址 只需要修改这个地址-->
                <mainClass>com.security.user.AuthServerApplication</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3.2、子pom.xml设计

子工程里面,需要使用那些jar就直接依赖即可。

在这里插入图片描述

在这里插入图片描述

但是父pom.xml里面dependencies标签引入的依赖,所以子工程都可以不用引入了,可以直接使用。所以我习惯性说,dependencies里面是的直接依赖,dependencyManagement里面的是间接依赖。直接依赖的,所有子工程不用再依赖直接使用,间接依赖的,子工程需要重新引入才可以使用。

四、两个项目之间依赖关系讲解

依赖的使用和一个项目中不同模块依赖是一样的,多模块项目之间依赖关系,常常有之。

当我们在父项目中的父pom.xml直接依赖进来的jar,我们将父项目打成jar让子项目中引用。那么子项目中就不用再引入父项目中直接依赖进来的jar了。

例如:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、子项目依赖父项目

依赖方式就像依赖springboot版本控制器那样依赖就行。

在这里插入图片描述

六、讲解子项目中为什么依赖这么少

6.1、子项目中父pom.xml依赖

在这里插入图片描述

6.2、子木块依赖

在这里插入图片描述

6.3、子项目为什么不需要其他的依赖了

在这里插入图片描述

七、将工程打包到本地仓库

参考博客:https://blog.csdn.net/qq_41853447/article/details/107291968

install项目的时候,注意install父项目,因为你install某个子项目时,只会将那个子项目install到本地仓库,其他你是不能install进去的。就意味着引入父项目的那个依赖是不能引入的,因为本地仓库没有。

在这里插入图片描述

查看本地仓库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

八、当前工程依赖当前模块注意(致命问题)

当前工程在父pom里面不能直接引用当前模块 ,引用了开发不会出现任何问题。但是无法打包,这是一个致命的问题。

在这里插入图片描述

九、另外的项目打包到其他项目时注意

9.1、场景描述

有些时候开发项目时为了给打包成jar给其他工程使用,而不是直接启动做一个项目。pom.xml配置应该注意一下问题。

在这里插入图片描述

 <!-- 如果这个依赖是打包给其他工程引用,那么一下这个插件不能引入。否则不能条用当前模块中的方法和类。-->
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <!-- main方法的地址 只需要修改这个地址-->
        <mainClass>com.control.oauth.NmAuthApplication</mainClass>
    </configuration>
</plugin>

如果这个模块是打成jar包直接启动使用的,如果不指定这个插件,那么也是启动不了的,会包找不到清单。

参考:https://blog.csdn.net/qq_41853447/article/details/107288874

9.2、另一个项目中依赖格式

我在nm-XX模块添加上这个插件,然后使用 mvn clean install -Dmaven.test.skip=true命令添加到本地仓库。

在这里插入图片描述

在这里插入图片描述

通过这样描述,你就很明确的发现,那些应用应该添加这个插件,指定main()方法所在的类。而那些方法又不能添加这个插件了吧。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# sso-shiro-cas spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的是MySQL5.0,数据库名为db_test 3. spring-node-1: 应用1 4. spring-node-2: 应用2 其中node1跟node2都是采用spring + springMVC + mybatis 框架,使用maven项目管理 ## cas集成说明 1.首先采用的是查数据库的方式来校验用户身份的,在cas/WEB-INF/deployerConfigContext.xml中第135行构建了这个类型 ``` xml ``` 其中QueryDatabaseAuthenticationHandler这个类是自定义构建的,在cas/WEB-INF/lib/cas-jdbc-1.0.0.jar里面,有兴趣的同学可以发编译看下,关于几个属性的说明 1. dataSource: 数据源,配置MySQL的连接信息 2. passwordEncoder: 加密方式,这里用的是MD5 3. sql: sql查询语句,这个语句就是根据用户输入的账号查询其密码 #### 以上就是单点登录管理的主要配置 ## 应用系统的配置node1 1. 应用系统采用shiro权限控制,并且跟cas集成 2. 在/spring-node-1/src/main/resources/conf/shiro.properties 文件中 ``` properties shiro.loginUrl=http://127.0.0.1:8080/cas/login?service=http://127.0.0.1:8081/node1/shiro-cas shiro.logoutUrl=http://127.0.0.1:8080/cas/logout?service=http://127.0.0.1:8081/node1/shiro-cas shiro.cas.serverUrlPrefix=http://127.0.0.1:8080/cas shiro.cas.service=http://127.0.0.1:8081/node1/shiro-cas shiro.failureUrl=/users/loginSuccess shiro.successUrl=/users/loginSuccess ``` 其中shiro.loginUrl 跟 shiro.logoutUrl的前面是cas验证的地址,后面的是我们应用系统的地址,这样配置的方式是为了在访问我们的应用系统的时候,先到cas进行验证,如果验证成功了,cas将重定向到shiro.successUrl 所表示的地址 3.在/spring-node-1/src/main/resources/conf/shiro.xml 文件中 ``` xml /shiro-cas = casFilter /logout = logoutFilter /users/** = user ``` > 其中shiroFilter这个类主要用于需要拦截的url请求,需要注意的是这个是shiro的拦截,我们还需要配置cas的过滤配置casFilter > casRealm这个类是需要我们自己实现的,主要用于shiro的权限验证,里面的属性说明如下 1. defaultRoles: 默认的角色 2. casServerUrlPrefix: cas地址 3. casService: 系统应用地址 最后我们还需要在/spring-node-1/src/main/webapp/WEB-INF/web.xml 文件中配置相关的过滤器拦截全部请求 ``` xml shiroFilter org.springframework.web.filter.DelegatingFilterProxy targetFilterLifecycle true shiroFilter /* ``` ## 系统运行 1. 端口说明,cas:8080,node1:8081,node2:8082,大家可以采用maven提供的tomcat7插件,配置如下: ``` xml org.apache.tomcat.maven tomcat7-maven-plugin 2.1 8081 UTF-8 tomcat7 /node1 ``` 这样的配置,我们甚至都不需要配置tomcat服务器了,建议这种方式 2.各个模块的访问地址 > cas:http://127.0.0.1:8080/cas > node1:http://127.0.0.1:8081/node1 > node2:http://127.0.0.1:8082/node2 3.访问系统 > 输入 http://127.0.0.1:8081/node1/shiro-cas ,进入cas验证 > 输入用户名 admin,密码 admin@2015,验证成功后将会重定向到http://127.0.0.1:8081/node1//users/loginSuccess ,也就是node1系统的主页,里面的节点2代表的是node2系统的主页,你会发现我们不需要登录到node2系统就能访问其中的系统了
用到的技术亮点: 前端用到了easyUI Easyui:jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。 jQuery EasyUI为提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,validatebox,datagrid,window,tree等等。 jQuery EasyUI是基于JQuery的一个前台ui界面的插件,功能相对没extjs强大,但页面也是相当好看的,同时页面支持各种themes以满足使用者对于页面不同风格的喜好。一些功能也足够开发者使用,相对于extjs更轻量。 jQuery EasyUI有以下特点: 1、基于jquery用户界面插件的集合 2、为一些当前用于交互的js应用提供必要的功能 3、EasyUI支持两种渲染方式分别为javascript方式(如:$('#p').panel({...}))和html标记方式(如:class="easyui-panel") 4、支持HTML5(通过data-options属性) 5、开发产品时可节省时间和资源 6、简单,但很强大 7、支持扩展,可根据自己的需求扩展控件 8、目前各项不足正以版本递增的方式不断完善 jQuery EasyUI 提供了用于创建跨浏览器网页的完整的组件集合,包括功能强大的 datagrid(数据网格)、treegrid(树形表格)、 panel(面板)、combo(下拉组合)等等。 用户可以组合使用这些组件,也可以单独使用其中一个。 插件列表如下:(主要用到了以下插件) 系统主要运用在:在系统的关于订单管理和用户管理页面都使用的是此框架。主要用到的是 datagrid(数据网格)这个插件。以上有操作文档 前端用到了jQuery jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。 系统主要运用在:在系统中一些分页或者样式交互事件处理中使用到了(比如地址选择框) 前端用到了ajax AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。 AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。 AJAX 是一种用于创建快速动态网页的技术。 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。 系统主要运用在:主要运用于系统的表单验证比如登录注册验证码以及一些需要不刷新页面的异步提交页面(在车票查询,登录注册表单验证页面使用到了,还有是一些删除操作也使用到了) 前端页面使用的jsp(Java服务端网页(一种建立动态网页的技术,Java Server Page)) JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。 系统主要运用在:本系统前端页面关于与后台交互的全部使用的jsp 后端使用的MVC三层架构模式 三层架构(3-tier ar
1.Spring简介 Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 A.控制反转(IOC)是什么呢? IOC:控制反转也叫依赖注入。利用了工厂模式将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean了。 [注意]:面试的时候,如果有条件,画图,这样更加显得你懂了 B.面向切面(AOP)又是什么呢? 首先,需要说明的一点,AOP只是Spring的特性,它就像OOP一样是一种编程思想,并不是某一种技术,AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。 [简单点解释],比方说你想在你的biz层所有类中都加上一个打印‘你好,AOP’的功能这你经可以用aop思想来,你先写个类写个方法,方法经实现打印‘你好,AOP’让后你Ioc这个类 ref=“biz.*”让每个类都注入。 2.Spring MVC简介 Spring MVC属于Spring Framework的后续产品,已经融合在Spring Web Flow里面,它原生支持的Spring特性,让开发变得非常简单规范。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。 3.MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。可以这么理解,MyBatis是一个用来帮你管理数据增删改查的框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值