Maven基础知识(3)
1.jar包版本冲突问题
调节原则
(1)路径近者原则(多个包中传递依赖的版本不同,那就自己创建一个)
(2)第一声明者原则(谁先谁来)
排除原则
版本固定原则
2.异常:Exception starting filter struts2(这个我出现了两三次,一直都是web.xml有问题,所以一定要好好检查,多检查几遍,尤其是拼写啥的)
原因:web.xml的配置中可能是因为eclipse是新版的,所以总是提示web:开头,结果必须没带web。(我是一部分带了,一部分没带导致的原因)
3.项目出现红色叉叉,里面没有文件有叉叉(参考:
)
1、properties->project Facets->修改右侧的version 保持一致
2、window->preferences->java->Compiler->设置右侧的Compiler compliance level
3、window->preferences->java->Installed JREs->设置或者选择右侧的Installed JREs
4.可能是新版本,提示有web:的标签,但是却无法访问该路径(访问时出现404,访问路径不存在,因为在这个坎上摔了两三次,花了好几个小时才发现这个错,所以笔记记了两遍)
5.分模块开发时,service需要依赖dao层,所以要先将dao层和parent放到仓库中去(放parent时会把已经存在的子模块(dao)顺便放进去)
项目关闭时以jar包形式存在
6.由于dao中的junit依赖范围是test,导致service报错,将其注释掉(注释时则默认这个包是compile,是可以传递依赖的,设为test则不能传递,但是由于项目一般是分模块开发的,不能强求每个人都要test,所以最好是设为test,只供自己测试),其实最好是在service项目模块中也导入依赖范围为test的包
7.依赖范围对直接依赖的影响
8.另一种测试方式
@ContextConfiguration(locations ={“classpath*:applicationContext-*.xml”})
classpath*:表示还包括从jar包中取出的xml文件
9.当直接依赖的项目是打开的,则可以直接添加依赖,若是关闭的,则要更新仓库,每个项目结束时要顺手上传仓库。
10.异常:Failed to execute goal on project ssh-web: Could not resolve dependencies for project com.java:ssh-web:war:0.0.1-SNAPSHOT: Could not find artifact com.java:ssh-service:jar:0.0.1-SNAPSHOT -> [Help 1]
找不到依赖,检查缺失的依赖,每次都要将项目上传。
11.如果私服启动不了,则到下面的文件中修改
12.关于私服的上传和下载来自学习的视频的笔记
上传dao
第一步: 需要在客户端即部署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
配置私服仓库的地址,本公司的自己的jar包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为release则上传到私服的release仓库,如果版本为snapshot则上传到私服的snapshot仓库
<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>
注意:pom.xml这里 和 settings.xml 配置 对应!
第三步:执行deploy命令发布到私服
13.下载dao
第一步 修改settings.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>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>