Java42maven:安装,生命周期,插件

Posted 码农编程录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java42maven:安装,生命周期,插件相关的知识,希望对你有一定的参考价值。


1.maven安装和创建项目:settings.xml,web.xml

如下在A1中只要说引入什么jar包就行。apache-maven-3.6.1解压到F/develop文件夹下,将原来 < localRepository > 和传智内网 < mirrors > 注释掉。
在这里插入图片描述
IDEA关联本地maven:Default Settings后搜索maven,-DarchetypeCatalog=internal ,如下配置好后对当前项目不生效需要重新File-New-Project-maven。
在这里插入图片描述
在这里插入图片描述
如下resources文件夹里放c3p0-config.xml等,test包下的类必须以XxTest结尾。
在这里插入图片描述
如下是创建maven管理的web工程详细步骤。
在这里插入图片描述
在这里插入图片描述
如下将上面java工程变为web工程,红框一行可以不写,默认为jar包,所以在java工程中没有写这一行。
在这里插入图片描述
在这里插入图片描述
如上一步可以View-Toolbar如下。
在这里插入图片描述
点击如下右边绿色+号设置web.xml,如下蓝色路径不对,替换了。
在这里插入图片描述
如上最后点apply-ok
在这里插入图片描述
如下第三步配置tomcat
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下点击Fix,新建的tomcat联系本工程。最后在webapp文件夹下新建index.html中body标签里写hello,点击乌龟运行,自动跳出网页显示hello,说明已经成功。
在这里插入图片描述

2.生命周期:tomcat运行时直接去maven仓库中读项目压缩的jar/war包

新创建出的工程没有target文件夹(整个项目编译后mvn compile的产出路径,或点击小乌龟后产生【小乌龟做的事是编译,测试,运行】)。
在这里插入图片描述
在这里插入图片描述
mvn package在target文件夹里多出.war包。如下在maven仓库中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

从远程仓库中获取坐标
1. 中央仓库 : http://mvnrepository.com/
2. 私服: 阿里云:   https://maven.aliyun.com/mvn/search

在这里插入图片描述
如下pom.xml(web.xml配置url和类的映射关系),修改了都要import changes。

<?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">  <!--schema约束-->
    <!--
        pom : project object model项目对象模型   描述整个项目            
         modelVersion : pom的版本
         坐标: groupId + artifactId + version (maven是通过坐标来唯一识别项目: jar/war)
    -->
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itheima.webdemo</groupId>
    <artifactId>maven-web2</artifactId>
    <version>1.0.0</version>
    <!-- 打包方式: war包 (默认jar包) -->
    <packaging>war</packaging>
    <!--
        依赖:dependencies  >  多个dependency
        版本统一管理 : properties
    -->
    <properties>
        <spring.version>4.2.5.RELEASE</spring.version>
        <c3p0.version>0.9.1.2</c3p0.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.8.5.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!--JDK编译插件,不论java工程还是web工程都要配置-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!--test插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <configuration>
                    <forkMode>once</forkMode>
                    <argLine>-Dfile.encoding=UTF-8</argLine>
                </configuration>
            </plugin>
            <!-- tomcat7插件,端口设为80不是8080,因为http协议80端口不用写 -->
            <plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>
              <configuration>
                <port>80</port>
                <path>/</path>
              </configuration>
            </plugin>
        </plugins>
    </build>
</project>

在这里插入图片描述
如上在Demo.java里写junit test是不合法的,web工程只要一个入口即tomcat的main方法,test没有意义。默认不写 < scope > compile < /scope >。

javax.servlet 3.0以上才支持注解。以前在web项目里可直接用servlet,没有需导包这回事,以前创建Java Enterprise时已指定tomcat,现在是maven没指定tomcat(后来才配置,servlet是接口,其实现由tomcat提供)。

因为web工程主入口在tomcat里,tomcat起到运行作用,maven只是一个管理工具,如果我们自己导入的servlet api存活到运行时期,有可能和tomcat里servlet api版本不同产生冲突。

写代码时不导jdbc驱动,编译不会报错(因为 " " 写的是字符串),运行会报错(找不到这个类)。system是本地绝对路径,但是发布时不能用绝对路径,所以system不看。
在这里插入图片描述

3.插件:maven的jdk是1.5,所以maven要扩展功能jdk1.8即插件

用maven功能测试代码(右边点击test功能【这个功能和按乌龟效果一样】,不是用idea在test代码里右击运行)会乱码,maven默认编码格式不是utf-8。

用maven的tomcat插件也可以让tomcat运行我们的程序,pom.xml写好tomcat7依赖后,还需要按如下操作,换成tomcat7后再点击乌龟。
在这里插入图片描述
点击如下绿色+号,选择Maven。
在这里插入图片描述
在这里插入图片描述
如下用插件(80端口可省略),不用插件用8080。
在这里插入图片描述
在这里插入图片描述
初始情况下,我们的本地仓库是没有任何jar包的,此时会从私服去下载(如果没有配置,就直接从中央仓库去下载),可能由于网络的原因,jar包下载不完全,这些不完整的jar包都是以lastUpdated结尾。

此时,maven不会再重新帮你下载,需要你删除这些以lastUpdated结尾的文件。如果本地仓库中有很多这样的以lastUpadted结尾的文件,可以执行如下脚本来删除:
在这里插入图片描述

set REPOSITORY_PATH=E:\\javaDevlopment\\maven\\health_repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause

在这里插入图片描述
在这里插入图片描述

<!--统一管理依赖版本,还要加入插件换成jdk1.8,不然默认jdk1.5会报错。-->
<properties>
  <c3p0.version>0.9.1.2</c3p0.version>
  <beanutils.version>1.8.3</beanutils.version>
  <commons.logging.version>1.1.1</commons.logging.version>
  <fastjson.version>1.2.47</fastjson.version>
  <servlet.version>3.0.1</servlet.version>
  <jstl.version>1.2</jstl.version>
  <mysql.connector.version>5.1.18</mysql.connector.version>
  <spring.version>4.2.4.RELEASE</spring.version>
</properties>

<dependencies>
  <!--c3p0-->
  <dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>${c3p0.version}</version>
  </dependency>
  <!--commons-beanutils-->
  <dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>${beanutils.version}</version>
  </dependency>
  <!--commons-logging-->
  <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>${commons.logging.version}</version>
  </dependency>
  <!--fastjson-->
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>${fastjson.version}</version>
  </dependency>
  <!--servlet3-->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>${servlet.version}</version>
    <scope>provided</scope>
  </dependency>
  <!--jstl-->
  <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>${jstl.version}</version>
  </dependency>
  <!--mysql驱动-->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.connector.version}</version>
    <scope>runtime</scope>
  </dependency>
  <!--spring-jdbctemplate-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
  </dependency>
</dependencies>

在这里插入图片描述

以上是关于Java42maven:安装,生命周期,插件的主要内容,如果未能解决你的问题,请参考以下文章

《Maven实战》笔记-4-生命周期和插件

Maven 构建生命周期

深入理解maven构建生命周期和各种plugin插件

maven如何用默认替换生命周期默认插件

Maven系列学习Maven生命周期和插件

Maven使用教程三:maven的生命周期及插件机制详解