zoukankan      html  css  js  c++  java
  • IDE中使用Maven

    3.1、war和war exploded的区别

    是选择war还是war exploded 这里首先看一下他们两个的区别:

    (1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布;

    (2)war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。

    (3)在平时开发的时候,使用热部署的话,应该对Tomcat进行相应的设置,这样的话修改的jsp界面什么的东西才可以及时的显示出来。

    两种方式得部署方式是不一样的,在获取项目的路径的时候得到的结果是不一样的

    String contextPath = request.getSession().getServletContext().getRealPath("/");
    

    3.2、创建Maven多模块项目

    多模块项目不一定要使用Maven,普通项目也可以。

    3.2.1、maven多模块优点

    1. 复用,划分出来的模块可以供其他项目使用。
    2. 固化,划分出来的某个模块可让专人开发,沉淀技术,分工协作。
    3. 优化依赖,每个模块有各自的pom。
    4. 节省时间,可在单个模块上进行build。

    3.2.2、在IDEA中创建多模块项目

    1、创建父模块

    进过创建后的完整项目结构,其中blog_admin,blog_web为SpringBoot项目,其余无骨架(archetype)Maven项目。

    image

    2、模块间依赖

    方法一:依赖class

    添加模块依赖

    image

    指定要依赖的模块

    image

    依赖成功

    image

    方法二:通过座标直接依赖jar

    1.直接引用

    <dependencies>
             <dependency>
                 <groupId>com.zhou</groupId>
                 <artifactId>blog_file</artifactId>
                 <version>${onlyblog.version}</version>
             </dependency>
    </dependencies>
    

    3.3、多模块项目依赖管理与依赖继承

    3.3.1、指定父模块与默认继承

    dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)

    3.3.2、依赖管理

    <!-- dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,
        是不会从父项目中继承下来的;只有在子项目中写了该依赖项,
        并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom
        因为blog_core需要被多次使用,我需要指定使用在某个项目中 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.zhou</groupId>
                    <artifactId>blog_core</artifactId>
                    <version>${project.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性。

    使用声明的依赖即不会引入依赖,也不会给他的子模块引入依赖。但这段配置是可以继承的。

    在子类中,依赖配置较原来就简单了。可以在子类中只配置groupId和artifactId ,省去了version。因为完整的依赖声明已经包含在父POM中。 这样可以统一项目范围中依赖的版本,帮助降低依赖冲突的几率。
    如果子模块不声明依赖的使用,即使该依赖已经在父POM的dependencyManangement中声明了,也不会产生任何实际的效果。

    如果想要在某个模块中使用和另一个模块中完全一样的dependencyManagement配置,除了赋值和继承外,还可以使用import范围依赖将这一配置导入。

    我们要达到的目的是:父模块作版本管理不实际依赖,子模块按需依赖。

    <dependencies>
            <dependency>
                <groupId>com.zhou</groupId>
                <artifactId>blog_core</artifactId>
            </dependency>
     </dependencies>
    

    这样做的好处:

    统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。

    3.4、使用Profiles标签实现多环境切换

    在实际开发项目中,常常有多种环境,例如:开发、测试、正式等。各个环境之间对应的中间件地址,用户名密码等参数数据也各不相同,Maven提供了标签 profiles 实现了多环境配置,简化了多环境切换的麻烦。

    3.4.1、springboot启动时是如何加载配置文件application.yml文件

    https://blog.csdn.net/chengkui1990/article/details/79866499

    3.4.2、在pom.xml定义环境的profile

    <!-- Maven控制Spring Profile -->
        <profiles>
            <!--默认开启dev-->
            <profile>
                <id>dev</id>
                <activation>
                    <!--这个字段表示默认激活-->
                    <activeByDefault>true</activeByDefault>
                </activation>
                <properties>
                    <profileActive>dev</profileActive>
                </properties>
                <build>
                    <!-- 产生的构件的文件名,默认值是${artifactId}-${version}-->
                    <finalName>${project.artifactId}-${project.version}</finalName>
                </build>
            </profile>
            <!--测试配置-->
            <profile>
                <id>test</id>
    
                <properties>
                    <profileActive>test</profileActive>
                </properties>
                <build>
                    <!-- 产生的构件的文件名-->
                    <finalName>${project.artifactId}-${project.version}</finalName>
                </build>
            </profile>
            <!--生产配置-->
            <profile>
                <id>prod</id>
                <properties>
                    <profileActive>prod</profileActive>
                </properties>
                <build>
                    <!-- 产生的构件的文件名-->
                    <finalName>${project.artifactId}</finalName>
                </build>
            </profile>
        </profiles>
    
        <build>
            <!-- profile对资源的操作 -->
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <!--打包时先排除掉所有yml-->
                    <excludes>
                        <exclude>application*.yml</exclude>
                    </excludes>
                </resource>
                <resource>
                    <!--这里是关键! 根据不同的环境,把对应文件夹里的配置文件打包-->
                    <directory>src/main/resources</directory>
                    <!-- 是否替换@xx@表示的maven properties属性值 -->
                    <filtering>true</filtering>
                    <!--如果有其他定义通用文件,需要包含进来-->
                    <includes>
                        <include>application.yml</include>
                        <include>application-${profileActive}.yml</include>
                    </includes>
                </resource>
            </resources>
        </build>
    

    3.4.3、将application.yml的active参数

    # SPRING PROFILES
    spring:
      profiles:
        active: '@profileActive@'
    

    image

    image

  • 相关阅读:
    发一个多维数组转xml格式的php函数方法
    php 返回json和jsonp格式
    phpstudy修改端口及网站根目录和访问 localhost 显示目录文件夹
    web后端开发语言Java和PHP的比较
    VSCode 的PHP常用插件及安装
    Nginx服务器的Websockets配置方法
    WebSocket-demo
    前端资源
    HTTPS 升级指南
    HTTP 协议入门
  • 原文地址:https://www.cnblogs.com/zhouyon/p/14724554.html
Copyright © 2011-2022 走看看