【JavaWeb-29】Maven依赖冲突、配置ssh框架、搭建maven私服、发包到私服
来源:互联网 发布:数据库如何实时备份 编辑:程序博客网 时间:2024/06/08 13:26
1、添加jar包依赖的时候。我们之前说可以rebuild index,这样我们就可以搜索本地仓库中的jar包了。但还有一种方式,是当本地没有的时候,我们怎么填写里面的信息。这个时候网络搜索比较靠谱,当然是去指定的网站:mvnrepository。
2、我们在添加jar包的时候,容易引起冲突,但是在引起冲突的时候,maven会帮我们自动解决冲突,除非有时候我们需要自己手动更改。maven帮我们解决冲突的原则有:
——路径优先原则,也就是说如果有一个版本的jar包是直接导入的,另一个版本的jar包是导入其他jar包的时候引入的,那么会以直接导入的为主。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4.RELEASE</version> </dependency>
——优先声明原则。也就是说不同版本的jar包,如果路径一样,那么谁在pom.xml中写在前面,谁生效。
<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>
——排除原则。也就是说,我排在前面的jar包,我在pom.xml中的该依赖处,添加一个<exclusion>
标签,在里面把我要排除的jar包写进去,这样就不会用这边的,而是用其他地方的jar包。
<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>
——当然,我们有时候会需要锁定jar包的版本,可以在pom.xml中添加<dependencyManagement>
标签,在里面写需要锁定的jar包和版本。再来一个当然,这个版本号可以提取出来作为单独一个变量,这样方便以后修改。看下面的代码,我们锁定了版本之后,在下面的依赖的地方可以直接省略版本的标签。
<!-- 属性 --> <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> <build> <plugins> <!-- 设置编译版本为1.7 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</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>/ssh</path> <!-- 可以灵活配置端口号 --> <port>8080</port> </configuration> </plugin> </plugins> </build>
3、配置ssh框架。直接在网上搜索“ssh pom”或者“ssm pom”等,就可以直接找到对应的pom.xml,然后修改成自己需要的版本即可。复制过来,还需要注意的是tomcat plugin那边,注意看看里面的path是不是自己的项目名称,以及port端口。
4、我们在配置Hibernate配置文件的时候,对应的实体类的.xml文件也要放在resources里面。这个时候不能直接把Customer.hbm.xml放在resources下面,以为我们最终还是要让它和Customer.java放在一起的。所以,我们就需要把cn.itcast.crm.entity这个文件夹整个拷贝到resources下面,这样他们在编译以后再classes中就会放在一起。
5、maven分层的项目结构。
——我们需要先创建一个父工程,这个时候,选择的形式是pom。我们需要把子工程用到的jar包都放在父工程的pom.xml中。
——然后右击父工程,新建,这个时候需要注意的是新建的不是maven project了,而是maven module了。一般分成entity、dao、service等。需要注意的是,创建的子工程,需要打成jar。创建好之后,我们可以在父工程的pom.xml中查看到module标签,以及子工程中的parent标签,这就是他们父子之间关系的联系。
——可以看到子工程的pom.xml中并没有写依赖jar包,但是maven dependencies中有很多jar包,就是因为这个都在父工程中写了。
——我们在创建service子工程的时候,需要依赖dao项目,所以我们需要把dao项目发布到本地仓库,并在service项目的pom.xml中添加dao的依赖,其实就类似于引入一个普通的jar包。
——一般我们在创建parent和dao之后,就直接发布install父工程,这个时候因为dao已经和父工程联系在一起了,所以也会一并发布dao。发布之后我们就可以在service中引入了。
——传递依赖中依赖范围的影响。比如service依赖dao,dao里面有junit包,但是junit包的scope是test,导致service没有引入junit。这就是说junit的依赖范围scope会影响传递依赖。
那怎么解决呢?既然没有传递过来,那我们直接在service的pom.xml中把依赖的jar包添加进来即可。我们争取不要修改junit的scope。
——我们创建的web子工程和dao、service不同的是,需要选择war的打包形式。它需要用到service,那么就把service打包发布,然后引用即可。
——虽然dao、service等里面都有maven dependencies,但是运行打包的时候只是运行web,所以只会把web子工程里的maven dependencies里的jar包进行打到war包里。
6、如果像上面那样分成dao、service、web的话,然后给不同团队和人去维护,那么我在本地对dao或者service打包之后,web的团队怎么获取到呢?难不成qq传一下么?这里就需要用到私服的概念,大概意思就是打包之后是导私服中的,然后web团队直接从私服获取。
——私服的搭建是用nexus软件。下载解压之后,里面有个bin,里面有个nexus.bat命令,直接在cmd中进行nexus.bat install
即可安装成功。然后启动这个服务的话,可以用nexus start
即可。这里面我们可以看到nexus解压之后的目录中有一个properties文件,里面有路径和端口的配置信息,用于访问的,因为nexus可以理解成是一个bs架构。
——我们可以访问localhost:8081/nexus
,之后打开欢迎页面,这个是需要登录的。默认的账号密码时admin
和admin123
,登陆进去之后,点击左边菜单Repositories。
——我们看到这里面有很多仓库并且有不同的类型。我们一般需要用的是group类型的仓库,这个仓库可以自动帮我们去不同的仓库中查找,哪里查到就用哪个仓库里的,查找顺序见下面:
7、我们下面的任务就是,怎样把我们的项目打成jar包发到私服上面,比如dao子工程?
——第一步,就是先配置maven的settings.xml文件,在这里面配置的是账号密码,也就是访问私服的账号和密码。
<server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server>
——第二步,在需要发布的项目的pom.xml配置,配置发布路径。下面的意思是如果这个项目是SNAPSHOTS的话就发布到snapshots对应的目录下,如果是RELEASES版本的话就发布到releases目录下,这里面有对应的url地址,这个就是私服的地址。
<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>
——至于说上面的id标签哪里来的,不是简单的小写那么简单,是私服中定义好的:
——最后用maven的deploy命令发布即可。
——使用私服的时候,需要先配置下载地址,在maven的settings.xml中的profiles标签中配置,我们配置的其实就是一个下载地址,这个地址就是私服地址,当然,我们配置的是group的,这样就只需要配置一个,不然releases和snapshots的等等都要配置。
<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>
——配置的profiles需要激活,也就是在settings.xml中添加下面这个代码:
<activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>
——最后,对引用的service或者其他工程进行一个maven-update project即可,这样就会在私服上把这个jar包下载到本地仓库,并且导入项目中。我们可以看Console控制台,可以发现有 downloading 从哪个网址下载jar包,也就是从我们的私服上下载的。
8、最后一个提示,就是如果dao里面有改动,怎么办?需要把dao里面的pom.xml的version改成0.0.2-SNAPSHOTS之类的,然后deploy到私服,并且通知service团队,在service的pom.xml中把引用dao的地方的版本改成0.0.2,这样就能正常运转了。
- 【JavaWeb-29】Maven依赖冲突、配置ssh框架、搭建maven私服、发包到私服
- Maven搭建SSH框架
- maven+Intelij搭建SSH框架
- Maven搭建SSH案例(二)-----SSH框架在maven中的配置
- maven冲突,maven依赖版本
- 用maven配置ssh框架
- maven包依赖冲突
- maven 依赖冲突
- maven解决依赖冲突
- Maven处理依赖冲突
- maven依赖冲突解决
- Maven 依赖冲突
- 解决Maven依赖冲突
- maven依赖冲突
- SSM框架的搭建之Maven依赖
- ssh maven 依赖
- 基于maven的ssh框架一步一步搭建
- 基于maven的ssh框架一步一步搭建
- Centos7下安装php7
- 享元模式
- Spring学习1——与Spring框架的第一次接触
- 解释HTTP中Get、Post、Put、Delete。它们有什么区别
- 被微软藏在开发者文档里的Hololens的7枚关键细节
- 【JavaWeb-29】Maven依赖冲突、配置ssh框架、搭建maven私服、发包到私服
- Ubuntu16.04安装OpenCV3.2.0教程
- unity如何在一个场景中使用另外一个参加烘培好的物体
- 深入理解C#中的String
- *** Please tell me who you are. Run git config --global user.email "you@example.com" git confi
- 没有后缀的图片保存到本地
- 获取控件的宽高
- PostgreSQL新增一列的pl/sql脚本
- php学习笔记(二)