Maven项目子父类工程搭建 排除依赖 锁定坐标版本

发布时间:2022-07-03 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Maven项目子父类工程搭建 排除依赖 锁定坐标版本脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一、子父工程之间的关系

  • 父工程与子模块之间是继承关系,子模块天生就能使用父工程中的内容

  • 子模块与子模块之间是依赖关系,需要程序员手动在Pom中指定

  • 编写规则

    所有子模块都需要的功能配置到父工程中只有某一个子模块需要的功能,单独配置到自己的模块中子模块之间的依赖关系存在传递性

二、搭建子父工程

@H_126_46@1、搭建子父工程项目结构
  • 创建maven父工程 (maven 控制台)

    父工程中删除src目录,只保留pom.XMl
  • 在父工程中创建 DAO 子模块(mave控制台 dao+entITy)

    打包方式为jar
  • 在父工程中创建service 子模块(mave控制台 )

    打包方式为jar
  • 在父工程中创建web子模块(mave web)

    打包方式为war包

2、配置子模块之间的依赖关系

在对应子模块的pom.xML中进行依赖,子模块与子模之间是通过打包后的jar包引用来进行依赖的

示例: &nbsp;  <dePEndencies>        <!--配置service依赖的dao模块-->        <dependency>            <groupId>cn.woniu</groupId>            <artifactId>Book-dao</artifactId>            <version>1.0-sNAPSHOT</version>        </dependency>    </dependencies>

 

3、dao模块编写

  • 在父工程中配置公共的坐标

    <?xml version="1.0" encoding="UTF-8"?><PRoject xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>cn.woniu</groupId>    <artifactId>book-par</artifactId>    <packaging>pom</packaging>    <version>1.0-SNAPSHOT</version>    <modules>        <module>book-dao</module>        <module>book-service</module>        <module>book-web</module>    </modules>    <dependencies>        <!--junit-->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>            <scope>provided</scope>        </dependency>        <!--lombok-->        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <version>1.18.20</version>            <scope>provided</scope>        </dependency>        <!--日志-->        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-api</artifactId>            <version>1.7.30</version>        </dependency>        <dependency>            <groupId>ch.qos.LOGback</groupId>            <artifactId>logback-core</artifactId>            <version>1.2.3</version>        </dependency>        <dependency>            <groupId>ch.qos.logback</groupId>            <artifactId>logback-classic</artifactId>            <version>1.2.3</version>        </dependency>        <!--spring相关包-->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>5.0.9.RELEASE</version>        </dependency>        <!--spring整合junit包-->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-test</artifactId>            <version>5.0.9.RELEASE</version>        </dependency>        <!--cglib-->        <dependency>            <groupId>cglib</groupId>            <artifactId>cglib</artifactId>            <version>3.3.0</version>        </dependency>        <!--spring aop-->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aspects</artifactId>            <version>5.0.9.RELEASE</version>        </dependency>        <!--spring事务-->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-tx</artifactId>            <version>5.0.9.RELEASE</version>        </dependency>                 <!--pageHelper分页插件-->        <dependency>            <groupId>com.github.pagehelper</groupId>            <artifactId>pagehelper</artifactId>            <version>5.2.0</version>        </dependency>    </dependencies>    <!--配置maven插件-->    <build>        <plugins>            <!--配置maven的编译插件-->            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>;maven-compiler-plugin</artifactId>                <version>3.5.1</version>                <configuration>                    <target>1.8</target>  <!-- 代码使用的开发版本 -->                    <source>1.8</source>  <!-- 需要生成的目标class文件的编译版本 -->                    <encoding>UTF-8</encoding>                </configuration>            </plugin>        </plugins>        <!--解决maven项目不加载静态资源-->        <resources>            <resource>                <directory>${basedir}/src/main/java</directory>                <includes>                    <include>**/*.xml</include>                </includes>            </resource>            <resource>                <directory>${basedir}/src/main/resources</directory>                <includes>                    <include>**/*.xml</include>                    <include>**/*.properties</include>                </includes>            </resource>        </resources>    </build></project>
  • 配置dao所需的坐标

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>book-par</artifactId>        <groupId>cn.woniu</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <packaging>jar</packaging>    <artifactId>book-dao</artifactId>    <dependencies>        <!--MySQL驱动-->        <dependency>            <groupId>mySQL</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>8.0.22</version>        </dependency>        <!--mybaits-->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>3.4.6</version>        </dependency>        <!--mybatis generator坐标-->        <dependency>            <groupId>org.mybatis.generator</groupId>            <artifactId>mybatis-generator-core</artifactId>            <version>1.3.7</version>        </dependency>        <!--druid-->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.2.5</version>        </dependency>        <!--spring jdbc整合包-->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-jdbc</artifactId>            <version>5.0.9.RELEASE</version>        </dependency>        <!--mybatis与spring整合包-->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>2.0.1</version>        </dependency>    </dependencies>    <build>        <plugins>            <!--mybatis generator自动生成配置-->            <plugin>                <groupId>org.mybatis.generator</groupId>                <artifactId>mybatis-generator-maven-plugin</artifactId>                <version>1.3.7</version>                <configuration>                    <!--配置文件的位置-->                    <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>                    <verbose>true</verbose>                    <overwrite>true</overwrite>                </configuration>                <dependencies>                    <dependency>                        <groupId>mysql</groupId>                        <artifactId>mysql-connector-java</artifactId>                        <version>8.0.22</version>                    </dependency>                </dependencies>            </plugin>        </plugins>    </build></project>
  • 配置dao中需要的静态资源

    db.properties    generatorConfig.xml   logback.xml
  • 配置在dao子模块中配置spring配置类

    DataBaseConfig

​ 编写dao模块的spring配置类

/** * Spring dao模块的配置文件 */@Configuration@componentScan(basePackages = {"cn.woniu.dao"})@Import(value = {DataBaseConfig.class})public class SpringDaoConfig {    /**     * 配置数据源     * @param dataBase     * @return     */    @Bean(name="dataSource",initMethod = "init",destroyMethod = "close")    public DruidDataSource druidDataSource(DataBaseConfig dataBase){        DruidDataSource dataSource=new DruidDataSource();        dataSource.setDriverclassname(dataBase.getDriverName());        dataSource.setUrl(dataBase.getUrl());        dataSource.setUsername(dataBase.getUserName());        dataSource.setPassword(dataBase.getPassword());        return dataSource;    }    /**     * 配置mybaits的会话工厂     * @param dataSource     * @return     */    @Bean    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){        SqlSessionFactoryBean factoryBean=new SqlSessionFactoryBean();        factoryBean.setDataSource(dataSource);        /*配置pageHelper插件*/        Pageinterceptor pageInterceptor=new PageInterceptor();        //封装PageInterceptor插件所需的属性对象        Properties properties=new Properties();        properties.setProperty("helperDialect","mysql");        properties.setProperty("reasonable","true");        pageInterceptor.setProperties(properties);        //将PageInterceptor插件对象,添加到SqlSessionFactoryBean中        factoryBean.setPlugins(new Interceptor[]{pageInterceptor});        return factoryBean;    }    /**     * 配置mybaits扫描dao接口     * @return     */    @Bean    public MapperScannerConfigurer mapperScannerConfigurer(){        MapperScannerConfigurer mapperScanner=new MapperScannerConfigurer();        mapperScanner.setBasePackage("cn.woniu.dao");        return mapperScanner;    }}

<font color=red>注意:当修改 一个子模块中的代码时一定要将该模块重新清理并打包,必须使用Intall将模块打包并发布本地仓库</font>

4、service模块编写

  • 编写service模块的spring配置

    /** * service部分的spring配置 */@Configuration@ComponentScan(basePackages = {"cn.woniu.service.impl"})@EnableTransactionManagement //开启事务public class SpringService {    /**     * 配置事务管理器     * @param dataSource     * @return     */    @Bean    public DataSourceTransactionManager transactionManager(DataSource dataSource){        DataSourceTransactionManager transactionManager=new DataSourceTransactionManager();        transactionManager.setDataSource(dataSource);        return transactionManager;    }}
  • 如果要编写测试方法,要读取dao的配置类否则无法获得数据源对象

    @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = {SpringDaoConfig.class, SpringServiceConfig.class})public class ServiceTest {    @Autowired    private IBookService bookService;    @Test    public void findTest(){        List<Book> bookList=bookService.findBook();        System.out.println(bookList.toString());    }}

5、编写web模块

  • 导包

      <dependencies>    <!--配置web依赖的service模块-->    <dependency>      <groupId>cn.woniu</groupId>      <artifactId>book-service</artifactId>      <version>1.0-SNAPSHOT</version>    </dependency>    <!--servlet坐标-->    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>servlet-api</artifactId>      <version>2.5</version>      <scope>provided</scope>    </dependency>    <!--jsp api坐标-->    <dependency>      <groupId>javax.servlet.jsp</groupId>      <artifactId>jsp-api</artifactId>      <version>2.0</version>      <scope>provided</scope>    </dependency>    <!--jstl标签库-->    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>jstl</artifactId>      <version>1.2</version>    </dependency>    <dependency>      <groupId>taglibs</groupId>      <artifactId>standard</artifactId>      <version>1.1.2</version>      <scope>provided</scope>    </dependency>    <!--spring web-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-web</artifactId>      <version>5.0.9.RELEASE</version>    </dependency>    <!--spring mvc-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>5.0.9.RELEASE</version>    </dependency>    <!--springmvc 需要的json相关坐标-->    <dependency>      <groupId>com.fasterxml.jackson.core</groupId>      <artifactId>jackson-databind</artifactId>      <version>2.9.0</version>    </dependency>    <dependency>      <groupId>com.fasterxml.jackson.core</groupId>      <artifactId>jackson-core</artifactId>      <version>2.9.0</version>    </dependency>    <dependency>      <groupId>com.fasterxml.jackson.core</groupId>      <artifactId>jackson-annotations</artifactId>      <version>2.9.0</version>    </dependency>    <!--文件上传所需坐标-->    <dependency>      <groupId>commons-fileupload</groupId>      <artifactId>commons-fileupload</artifactId>      <version>1.4</version>    </dependency>    <dependency>      <groupId>commons-io</groupId>      <artifactId>commons-io</artifactId>      <version>2.10.0</version>    </dependency>  </dependencies>  <build>    <plugins>      <!--maven tomcat插件-->      <plugin>        <groupId>org.apache.tomcat.maven</groupId>        <artifactId>tomcat7-maven-plugin</artifactId>        <version>2.2</version>        <configuration>          <!--请求路径-->          <path>/</path>          <!--指定端口-->          <port>8080</port>          <!--配置tomcat插件编码格式-->          <uriEncoding>UTF-8</uriEncoding>        </configuration>      </plugin>    </plugins>  </build>
  • 创建springmvc配置文件

    和以前一样

  • 创建启动类

    /** * 项目启动类 */public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {    /**     * 读取spring配置类     * @return     */    @override    protected Class<?>[] getRootConfigClasses() {        return new Class[]{                SpringDaoConfig.class,                SpringServiceConfig.class        };    }    /**     * 读取springmvc配置类     * @return     */    @Override    protected Class<?>[] getServletConfigClasses() {        return new Class[]{                SpringWebConfig.class        };    }    /**     * 配置springmvc控制器请求映射(controller要拦截哪些请求)     * @return     */    @Override    protected String[] getServletMappings() {        return new String[]{"/"};    }    /**     * springmvc中文乱码过滤器     * @return     */    @Override    protected Filter[] getServletfilters() {        Filter  encodingFilter=new CharacterEncodingFilter("utf-8",true);        return new Filter[]{encodingFilter};    }}

三、maven工程中坐标版本冲突

1、依赖调解原则

  • 第一声明者优先

  • 路径近者优先原则

​ 这两个原则都需要根据路径选择

2、排除依赖【常用】

​ 在某个模块的pom.xml中声明不使用指定版本的坐标

 <dependency>      <groupId>com.woniu</groupId>      <artifactId>maven-dao</artifactId>      <version>1.0-SNAPSHOT</version>      <exclusions>          <exclusion>              <groupId>log4j</groupId>              <artifactId>log4j</artifactId>          </exclusion>      </exclusions></dependency>

3、锁定坐标版本【常用】

在pom.xml中将版本号提取出来,使用<properties>标签设置成变量。

 <properties>        <junit-version>4.12</junit-version>        <spring-version>5.0.9.RELEASE</spring-version>    </properties>

 

脚本宝典总结

以上是脚本宝典为你收集整理的Maven项目子父类工程搭建 排除依赖 锁定坐标版本全部内容,希望文章能够帮你解决Maven项目子父类工程搭建 排除依赖 锁定坐标版本所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。