maven高级j解决ar包冲突工程拆分聚合私服远程仓库安装上传下载

本文详细介绍了maven工程如何解决jar包冲突,包括声明优先、路径近者优先和直接排除法。接着讨论了maven在web工程中的应用,特别是数据查询操作。此外,文章还阐述了maven工程的拆分与聚合思想,并分析了工程、模块、依赖和继承的关系。最后,介绍了maven私服的使用,包括安装、登录、上传和下载jar包的操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

maven工程解决jar包冲突解决

第一种解决方案
  • 第一声明优先原则
    • 哪个jar包在坐标靠上的位置,这个jar包就是先声明的,先声明的jar包坐标下的依赖包,可以优先进入项目中
第二种解决方案
  • 路径近者优先原则
    • 直接依赖路径比传递依赖路径近,最终项目中进入的jar包会是路径近的直接依赖包
  • 直接依赖:项目中直接导入的jar包,就是项目的直接依赖包
  • 传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中
第三种解决方案
  • 直接排除法
    • 我们要排除某个jar包下依赖包的时候,在配置exclution标签的时候,内部可以不写版本号,因为此时依赖包使用的版本和默认jar包一样
<!-- 排除掉了spring-beans的core依赖包 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.2.4 RELEASE</version>
    <exclusions>
        <exclution>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclution>
    </exclusions>
</dependency>

maven传统web工程做一个数据查询操作

  • 就是一个ssm的查询数据库操作,具体代码省略,重点配置如下
  • 使用一个新的数据源:Druid
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///maven"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
    
  • 配置生产SqlSession对象的工厂
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 扫描pojo包,给对象起别名 -->
        <property name="typeAliasesPackage" value="com.my.domain"/>
        
    </bean>
    
  • 配置扫描接口包路径,生成包下所有接口的代理对象并且放入spring容器中
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.my.dao"/>>
    </bean>
    
  • 配置service层组件扫描配置
        <context:component-scan base-package:"com.itheima.service">
    
  • 配置事务aop
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 配置事务通知 -->
    <tx:advice id="advice">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    <!-- 配置切面 -->
    <aop:config>
        <sop:pointcut id="pointcut" expression="execution(* com.my.service.impl.*.*(..))"/>
        <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/>
    </aop:config>
    
  • springmvc.xml配置
    <!-- 组件扫描 -->
    <context:component-scan base-package="com.my.controller"/>
    <!-- 处理器映射,处理器适配器 -->
    <mvc:annotation-driven/>
    <!-- 师徒解析器 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResource">
        <property name="prefix" value="WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!-- 释放静态资源 -->
    <mvc:default-servlet-handler>
    
  • 配置spring核心监听器
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--重新指定spring配置文件的路径-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    
  • 配置springmvc的核心servlet
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

把web工程修改成maven拆分与聚合的形式

maven工程拆分与聚合的思想
  • 一个项目拆成不同模块,不同模块组合成一个项目
  • 比方说传统的ssm框架整合项目,在每个项目中中放置一套ssm框架jar包,如果是maven的ssm,就只需要一套jar包,真正的项目中只需要放置jar包坐标
  • 在比方说公司开发新项目,我们首先要考虑的问题是dao,service,utils,domain这些模块是否已经存在,如果存在直接引用坐标即可,而不是copy。如果需要维护,也只需要修改一份代码
  • maven把一个完整的项目,分成不同的独立模块,这些模块都有各自独立的坐标,哪个地方需要其中某个模块,就直接引用该模块的坐标即可。这就是maven拆分的思想
  • 把拆分零散的模块聚合到一起编写一个完整的项目,就是maven聚合的思想
工程和模块,依赖和继承的关系
  • 工程和模块的区别
    • 工程天生只能使用自己内部资源,工程天生是独立的,后天可以和其他工程或模块建立关联关系
    • 模块天生不是独立的,模块天生是属于父工程的,模块一旦创建,所有父工程的资源都可以使用
  • 工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,代码完整,就可以说这是一个完整的项目,和此项目是工程和模块没有关系
  • 父子工程之间,子模块天生继承父工程,可以使用父工程所有的资源,子模块之间天生是没有任何关系的
  • 父子工程之间不用建立关系,继承关系是先天的,不需要手动建立
  • 平级之间的引用叫依赖,依赖不是先天的,是需要后天依赖的
依赖丢失问题
  • 实际开发中,如果传递依赖丢失,表现形式就是jar包的坐标导不进去,解决方法就是再导入一次即可
    (img-slExcWHO-1572415522221)(./images/依赖丢失.png)]

maven私服(远程仓库)

安装并且登录
  • 下载安装压缩包,解压到没有中文路径的文件夹下
  • 进入bin目录,打开控制台
  • 安装/卸载/启动:nexus.bat install / uninstall / start
  • 配置文件在conf文件夹下nexus.properties
  • 访问http://localhost:8081/nexus/
  • 账号admin,密码admin123
上传jar包到私服
<!-- 配置到settings.xml -->
<server>
    <id>releases</id>
    <username>admin</username>
    <password>admin123</password>
</server>
<server>
    <id>snapshots</id>
    <password>admin123</password>
</server>
<!-- 配置到pom.xml -->
<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>
下载jar包从私服(配置到settings.xml的profiles标签中)
<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>

如何安装第三方jar包(安装到本地仓库,安装到私服)

安装第三方jar包到本地仓库
  • 进入jar包所在目录运行
    mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
  • 打开cmd直接运行
    mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\安装第三方jar包\fastjson-1.1.37.jar
安装第三方jar包到私服
  • 在settings配置文件中添加登录私服第三方登录信息
    <server>
    <id>thirdparty</id>
    <username>admin</username>
    <password>admin123</password>
    </server>
    
  • 进入jar包所在目录运行
    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
  • 打开cmd直接运行
    mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\安装第三方jar包\fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值