• Maven


    一、web项目包结构

     java:类文件

    resoutces:静态文件

    webapp:页面文件

    test:测试类文件

    pom.xml:Maven配置文件

    二、在Maven中添加tomcat插件

    在pom.xml文件中加入以下内容

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.tomcat.mavengroupId>
    5. <artifactId>tomcat7-maven-pluginartifactId>
    6. <version>2.2version>
    7. <configuration>
    8. <url>http://192.168.8.129:8080/manager/texturl>
    9. <username>adminusername>
    10. <password>adminpassword>
    11. <path>/${project.artifactId}path>
    12. <port>8080port>
    13. configuration>
    14. plugin>
    15. plugins>
    16. build>

    三、Maven项目类型

    (1)Maven的项目类型有三种:

    jar: 相当于我们之前使用idea创建的java项目。打包主要打包java文件。

    war: web项目类型。打包时除了src中内容,还会包含webapp目录,要比jar类型文件打包的内容更多。

    pom: 在聚合项目中使用。聚合项目中如果一个项目为父项目,项目类型应该为pom类型。当项目类型为pom类型时,表示该项目除了会配置pom.xml以外不会有任何其他类或资源文件。

    (2) 如何修改项目类型

    jar

    四、资源拷贝

    可以使得非.java文件在编译后依然保留。

    下面就是让所有的.txt文件保留

    1. <build>
    2. <resources>
    3. <resource>
    4. <directory>src/main/java</directory>
    5. <includes>
    6. <include>**/*.txt</include>
    7. </includes>
    8. <filtering>true</filtering>
    9. </resource>
    10. <resource>
    11. <directory>src/main/resources</directory>
    12. <filtering>true</filtering>
    13. </resource>
    14. </resources>
    15. </build>

    五、POM模型中的三种关系

    (1)依赖关系:当一个项目需要使用到其他项目的内容时,就可以使用依赖。

    使用方式:通过坐标引入jar包。

    主要用途:使用jar包中的类

    依赖传递:b依赖于a,不仅会引入a,还会引入a所依赖的jar包。

    依赖重复问题:

            路径不同间接依赖中maven采用的是路径最短者优先.

            路径相同间接依赖中maven 采用的是依赖定义顺序从上到下.

       
           
                mysql
                mysql-connector-java
                8.0.28
           

       

    (2)继承关系:继承下项目分为父子关系。父项目的<packaging>打包方式可以为jar | pom,无论是jar还是pom,子项目只能继承父项目的pom.xml,并不能继承src/main下的内容。

       
            com.bjsxt
            projectparent
            1.0-SNAPSHOT
       

    依赖管理

    在继承关系下父项目的依赖,子项目会全部继承。通过父项目的设置,子类可以选择继承哪些依赖。

    在父项目中可以通过管理父项目中的依赖,子项目则可以指定继承那些依赖,当子项目需要这个依赖时坐标可以省略。

    在父项目中可以通过管理父项目中的插件,子项目则可以选择继承哪些插件。

       
       
           
               
                    mysql
                    mysql-connector-java
                    8.0.28
               

           

       






    使用属性标签管理版本

    的子标签。

    名称是自定义的,里面的8.0.27是自己填写的。

    可以在标签的中通过${属性标签名}获取到定义的属性值。

       
       
           
            8.0.27
       

       
       
           
               
                    mysql
                    mysql-connector-java
                   
                    ${mysql-version}
               

           

       

    (3)聚合关系:在一个父项目中创建多个模块,所有的模块都是独立的,可以独立运行。且父项目不需要install,子模块就可以继承父项目的pom中的依赖。

    六、Maven项目生命周期

    Maven有三套相互独立的生命周期(Lifecycle ):

    • Clean Lifecycle:做一些清理工作;

    • Default Lifecycle:构建的核心部分、编译、测试、打包、部署等;

    • Site Lifecycle:生成项目报告、站点、发布站点;

    其中Default Lifecycle包含如下阶段:

    • validate - 验证项目是否正确并且所有必要的信息都可用

    • compile - 编译项目的源代码

    • test- 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求打包或部署代码

    • package - 将编译后的代码打包成可分发的格式,例如 JAR。

    • verify - 对集成测试的结果进行任何检查,以确保满足质量标准

    • install - 将包安装到本地存储库中,作为本地其他项目的依赖项

    • deploy - 在构建环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享

    七、常用指令 

    常用指令指令含义
    mvn help:system打印系统属性和环境变量
    mvn clean删除target目录,清理所有之前所有编译的内容。手动删除target目录和运行此命令是等效的。
    mvn validate验证项目是否可用
    mvn compile编译项目,生成target目录
    mvn test执行测试。执行测试时会自动运行src/test/java 目录下所有/*Test.java、/Test.java、**/TestCase.java 文件,采用约定方式执行。
    mvn package打包项目
    mvn deploy发布项目
    mvn verify校验包是否正确
    mvn install安装到本地仓库
    mvn site生成站点。但是需要添加插件才能使用。

     八、scope(当前依赖的有效范围)

    在pom.xml中标签有一个子标签,表示当前依赖的域(域:有效范围)。

    取值解释
    compile默认值,不配置scope时的取值,表示依赖参与整个项目的编译、打包、测试、发布。也就是说:编译时需要使用、测试时需要使用、最终打包时会包含。属于一种强依赖。
    provided只是编译时生效,项目最终被打包时不会包含该依赖。常见servlet的依赖时需要配置。
    runtime运行时生效。表示编译时不参与,但是参与项目的测试、打包。该依赖被打包时会被包含。
    test只在测试时生效,这个包中的类只能在src/main/test中使用。常用在junit依赖时需要被配置。
    system类似provided,但是需要结合systemPath属性,表示依赖不是来源于本地库,而是来源于其他目录。使用较少,在一些特殊项目中才可能被使用。

    使用方式

       
           
                junit
                junit
                4.13.2
                test
           

       
     

    注意:在导入servlet-api和jsp-api时一定要设置scope为provided,表示只在编译时生效。

    原因:我们项目中需要导入servlet-api和jsp-api作为编译时使用。如果这两个依赖设置scope为compile,打包后在tomcat中就出现了两个servlet-api和jsp-api,访问servlet时会报错。

  • 相关阅读:
    XTTS系列之四:迷迷糊糊的并行度
    数据挖掘与分析应用:分类算法:k近邻KNN,决策树CART,贝叶斯,支持向量机SVM
    PostgreSQL将文本转换成固定的长整型
    MaxCompute(ODPS)中Python UDF使用:如何打包所有依赖包
    Eclipse 主网即将上线迎空投预期,Zepoch 节点或成受益者?
    [附源码]java毕业设计企业记账系统
    day60
    2022年哪些浏览器安全、速度快、好用又不卡?
    Java进阶篇--Condition与等待通知机制
    acwing 803. 区间合并-java版本
  • 原文地址:https://blog.csdn.net/weixin_53455615/article/details/127123067