Maven认识续

解决导入包冲突以及相关思路**

当两个包有相同的jar包,但jar包的版本不同时

方式一:

那个先声明的jar包坐标下的依赖包,可以优先进入项目

方式二:

路径近者优先原则

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

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

方式三:当我们排除某个jar包下依赖包,在配置exclusions标签的时候,内部可以不写版本号,因为此时依赖包使用的版本和默认jar是一样的

pom文件内标签

,这个只是锁住相关版本并不能锁住jar所以写完这个还要在下面写一份

maven工程是可以分父子依赖关系的

凡是依赖别的项目后,拿到的别的项目依赖包,都属于传递依赖,比如:当前的a项目,被b项目依赖,那么我们把a项目所有包传递到b项目,b项目再导进一套ssm包就是直接依赖,直接依赖会覆盖传递依赖,为了防止上面的情况可以将a的jar的坐标锁住,就无法覆盖

管理jar包版本

,里面的标签为类似的<xxx.version></xxx.version>的标签

maven工程拆分与聚合的思想

传统的ssm框架整合项目,每个项目都放置在一套ssm框架的jar包

如果在maven只需要在仓库中放一套

jar包与java代码在计算机看来是一样的都是0与1组成的

所以为什么不把dao,service,controller分成模块然后放到仓库中这样就可以解决代码的重用和维护上的问题

上面说的是maven拆分的思想,我们可以把拆分零散的模块聚合在一起编写一个完整项目就是maven聚合思想

工程与模块的区别

工程不等于完整的项目,模块也不等于完整的项目,一个完整的模块看的是代码,代码完整就可以说是完整的项目和此项目的工程和模块没有关系

工程天生是独立天生使用自已的内部资源,后天可以和其他工程和模块建立关系

模块天生不是独立的,天生属于工程,可以使用父工程的资源

父子工程直接,子模块天生集成父工程,可以使用父工程所有资源

子模块之间天生是没有任何关系的,模块之间可以通过依赖来实现,就在pom文件中注入依赖

父子工程继承关系是先天的,不需要手动建立

平级直接的引用叫依赖,依赖不是先天,需要手动建立


Nexus私服

下载地址为http://www.sonatype.org/nexus/archived/

下载zip包后解压打开bin复制其地址,用管理员的身份打开dos界面进到相关的路径

安装nexus

在该路径的dos界面中输入nexus.bat install

卸载

输入nexus.bat uninstall

启动为:

nexus.bat start

如何将编辑器中的文件上传到私服里面去?

思路pom文件,还有本地仓库

在你要上传到私服的模块中的pom文件中

<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>

在你的本地仓库的设置中set.xml文件中的servers标签里面设置

<server>
 <id>releases</id>
 <username>admin</username>
 <password>admin123</password>
 </server>
<server>
 <id>snapshots</id>

 <username>admin</username>
 <password>admin123</password>
 </server>

如何将私服的东西下载到本地仓库

在本地仓库的设置里面

<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中的
	<activeProfiles>
		<activeProfile>dev</activeProfile>
	</activeProfiles>
//这个在setting就行,这个是激活的意思

还有个问题如何将从别的途径得来的jar包加入到本地仓库

在jar包所在的目录打开dos输入mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37

-Dfile= fastjson-1.1.37.jar -Dpackaging=jar

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

上面的fastjson为文件名称,1.1.37为版本,后者 fastjson-1.1.37.jar为名称

上面的语句就是意思就是运行maven本地仓库进行添加的功能,在com.alibaba里面添加标识为fastjson,版本为1.1.37,名称为 fastjson-1.1.37.jar,打包方式为jar的文件

如果不想受到目录的限制,可以在任何位置打开dom,输入指令如下:mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=文件的绝对路径

还有一个问题如何把第三方的jar导入到远程仓库上

在本地仓库里面设置,servers标签里面,原理是通过本地仓库上传到远程仓库里面

<server> 
 <id>thirdparty</id> 
 <username>admin</username>
 <password>admin123</password> 
 </server>

指令如下:这个是在该jar目录中用dos

mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37

-Dpackaging=jar -Dfile=fastjson-1.1.37.jar

-Durl=http://localhost:8081/nexus/content/repositories/thirdparty/

-DrepositoryId=thirdparty

另一个与上面同理

上面参数说明如下:

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 仓库可以看到这包。

最好用第二种方式就是通过绝对路径的方式

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页