Maven-教程--Maven生命周期

本文详细介绍了Maven的生命周期,包括clean、compile、package、install和deploy等命令的用途。同时,深入讲解了Maven的依赖管理,如坐标定义、依赖版本冲突解决和依赖调解原则,并给出了在IDEA中创建分布式工程、搭建Maven私服以及整合SSM的步骤。此外,还讨论了从私服下载jar包的方法。

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


注:接Maven教程(1)Maven的生命周期

八.Maven的生命周期

第一个命令:mvn clean

清除target目录的文件

在这里插入图片描述

第二个命令: mvn complie 编译java源文件 输出目录target

在这里插入图片描述

第三个命令:mvn package

如果java项目 jar包
如果javaweb项目 war
在这里插入图片描述

第四个命令: mvn install 把项目发布到本地仓库

在这里插入图片描述

第五个命令: mvn deploy,部署

▅ 编译命令 mvn compile
编译后 .class文件在 out下 (这个命令只会对java源程序编译, 不会编译测试代码 , 编译测试类 mvn test-compile , 编译后.class 文件在 out)

▅ 测试命令 mvn test
执行所有测试用例方法, 重新编译

▅ 清除命令 mvn clean
清除target目录 (清除所有编译结果或者打包结果 ),清理后编译。

▅ 打包命名 mvn package
java项目生成 jar包, web项目生成war包

九.Maven的依赖管理

9-1坐标定义

maven对每个工程通过坐标管理。
groupId:定义当前Maven项目名称
artifactId:定义项目模块
version:定义当前项目的当前版本

9-2查询其它构件的坐标

如何查询坐标
使用网站搜索
http://search.maven.org/
http://mvnrepository.com/
网站搜索示例:
在这里插入图片描述
在这里插入图片描述

9-3依赖管理

在这里插入图片描述

9-4依赖版本冲突解决(重点)
9-4-1 问题?

当一个项目依赖的构件比较多时,它们相互之前存在依赖,当你需要对依赖版本统一管理时如果让maven自动来处理可能并不能如你所愿,如下例子:

<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-spring-plugin</artifactId>
  <version>2.3.24</version>
</dependency>
<!-- spring-context依赖spring-beans-4.2.4 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.2.4.RELEASE</version>
</dependency>

org.apache.struts依赖spirng-beans-3.0.5,spring-context依赖spring-beans-4.2.4,但是发现spirng-beans-3.0.5加入到工程中,而我们希望spring-beans-4.2.4加入工程。

9-4-2依赖调解原则

maven自动按照下边的原则调解:
▅ 1、第一声明者优先原则
在pom文件中谁先声明以谁为准。
测试:
如果将上边struts-spring-plugins和spring-context顺序颠倒,系统将导入spring-beans-4.2.4。

▅ 2、路径近者优先原则
例如:A-> spirng-beans-4.2.4,A->B-> spirng-beans-3.0.5,则spirng-beans-4.2.4优先
测试:
在本工程中的pom中加入spirng-beans-4.2.4的依赖,根据路径近者优先原则,系统将导入spirng-beans-4.2.4:

9-4-3 如何排除依赖

方法一:可以通过排除依赖方法辅助依赖调解:
比如struts2-spring-plugin中添加排除spring-beans:

<!-- struts2-spring-plugin依赖spirng-beans-3.0.5 -->
<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId> struts-spring-plugin</artifactId>
  <version>3.3.24</version>
  <!-- 排除 spring-beans-->
  <exclusions>
    <exclusion>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
    </exclusion>
  </exclusions>
</dependency>

方法二:锁定版本(推荐使用)
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,此方法在企业开发中常用:

  <dependencies>
    <!--这里锁定版本为4.2.4 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
  </dependencies>
</dependencyManagement>

十.IDEA创建分布式工程(Maven分模块构建工程)

10-1 需求:

一个工程非常大的时候,多人协助开发。
为了提高开发效率,将整个工程拆分成多个模块工程,每个团队开发,开发完成将工程打成jar包发布仓库中,其它团队成员连接仓库下载其它模块的jar(class),只需要编译本模块的clas即可。

10-2分模块构件架构(画图说明)

本文使用intelliJidea 14

在idea中创建一个分层(视图层、业务逻辑层、数据访问层)的项目步骤如下:
1.创建一个project,idea在创建project的时候会默认创建一个module,此时,给这个project和module命名(比如hello_client,表示这是项目的客户端也就是视图层),并且指定项目存放路径。
2.新建一个module,新建的时候路径指定为和上面的hello_client同级。命名为hello_service,表明这是项目的业务逻辑层。
3.新建一个module,命名为hello_dal,表示这是项目的数据访问层,同上,此module的目录指定为和hello_client、hello_service同级。
4.此时在project窗口中会看到并列的三个module。开发的时候就可以在不同的层次上放置不同的代码。如下图:
在这里插入图片描述
5.在项目中hello_client会引用hello_service的代码,而hello_service会引用hello_dal的代码。在idea中添加引用的方式为:
选中任意一个module,按F4进入project structure;选择左侧的modules菜单;选择中间的hello_client,选中右侧的dependencies选项卡,点击右侧的绿色+按钮,选择modeule dependecy,在弹出的选择框中选择hello_service。这样就为hello_client添加了hello_service的引用。直接在hello_client中引用hello_service的代码即可。同理,添加hello_service对hello_dal的引用。
在这里插入图片描述

10-3步骤实现

第一步:创建父工程 打包方式为POM
在这里插入图片描述
备注:父工程不写业务:统一依赖版本
在这里插入图片描述
第二步:创建springmvc子工程(打包成war包)
在这里插入图片描述
第三步:创建spring子工程(打成war包)同上
第四步:注意事项
创建完毕后 父工程中pom.xml文件中
在这里插入图片描述
Jar工程默认是没有

<packaging>jar</packaging>

在这里插入图片描述

十一.Maven搭建私服(了解)

11-1私服部署结构

在这里插入图片描述
在公司的局域网内部署一台服务器,服务器上安装maven私服软件。
服务器上存储了maven仓库。

在私服环境下本地项目找jar流程是:
1、先找本地仓库
2、如果本地仓库没有从私服找
3、如果私服没有从中央仓库下载,下载成功将jar向私服和本地仓库都存一份。

11-2安装私服

下载Nexus, 下载地址:http://www.sonatype.org/nexus/archived/

下载:nexus-2.12.0-01-bundle.zip

解压nexus-2.12.0-01-bundle.zip,本教程将它解压在F盘,进入bin目录:
在这里插入图片描述
cmd进入bin目录,执行nexus.bat install
在这里插入图片描述

11-3卸载nexus

cmd进入nexus的bin目录,执行:nexus.bat uninstall

11-4运行nexus

方法1:
cmd进入bin目录,执行nexus.bat start

方法2:
直接启动nexus服务
在这里插入图片描述
查看nexus的配置文件conf/nexus.properties
默认用户名和密码 :
admin/admin123
在这里插入图片描述

11-5仓库类型

在这里插入图片描述
1、hosted:宿主仓库,自己项目的jar要放到hosted类型的仓库中。

2、proxy:代理仓库,代理中央仓库

3、virtual:虚拟仓库,存储了maven1的构件,一般不用。

4、group:仓库组,将一些仓库组成一个组,自己项目连接仓库组去下载jar包。
平常开发中都去连接仓库组,仓库组中包括:hosted、proxy等。在这里插入图片描述

11-6使用nexus

在nexus搜索jar包
在nexus加入jar包索引。

方法1:
连网下载
在这里插入图片描述
方法2:
手动下载索引
在这里插入图片描述
从网上下载:indexer-cli-5.1.0.jar
在这里插入图片描述
将这三者放在一个文件夹,cmd执行:
java -jar indexer-cli-5.1.0.jar -u nexus-maven-repository-index.gz -d indexer

生成索引目录:
在这里插入图片描述
在这里插入图片描述

将项目发布到私服
1、在自己电脑的maven的setting.xml中配置
<server>
	  releases对应nexus的仓库名称
      <id>releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
	<server>
		snapshots对应nexus的仓库名称
      <id>snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
        ```
###### 2、配置项目pom.xml 
```javascript
  <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>
注意:pom.xml这里<id> 和 settings.xml 配置 <id> 对应
3、准备将自己工程的jar发布到nexus私服中。

当你的工程版本是releases会发布到私服的releases仓库
当你的工程版本是snapshots会发布到私服的snapshots仓库

执行deploy

从私服下载jar包

配置仓库组:
在这里插入图片描述
仓库组地址:

http://localhost:8081/nexus/content/groups/public/

配置镜像
镜像地址为nexus仓库组的地址

在setting.xml配置镜像

<mirror>
	  <!--镜像id,mirrors中可以配置多个镜像,保证id不重复-->
      <id>nexus</id>
	  <!--mirrorOf指定仓库id,仓库组包括了id为 releases、snapshots、thirdparty 、central 的仓库,可以配置具体的id,如果镜像所有的仓库则设置为*-->
      <mirrorOf>*</mirrorOf>
	  <!--镜像地址-->
      <url>http://localhost:8081/nexus/content/groups/public/</url>
    </mirror>

本地项目不连中央仓库,连接镜像(相当于连接私服)

十二.IDEA创建javaweb工程整合SSM

开发环境:JDK8 Tomcat7
开发工具:IDEA
数据库:Mysql
数据库可视化工具:SQLyog
数据库建模工具:powerdesign
后端架构:SpringMVC+Spring+Mybaits
前端:JSP+javascript,ECMA
步骤实现:

第一步:创建mavenjavaweb工程

备注:默认java目录 需要手动创建
在这里插入图片描述

第二步:在pom.xml文件中引入相关的坐标依赖(SpringMVC、Spring、mybatis、mysql、c3p0、servler-api、jstl)
<?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>com.taotao</groupId>
  <artifactId>taotao-web</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--添加spring支持-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <!-- mysql的数据库驱动包 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.21</version>
    </dependency>

    <!-- Mybatis 开发包 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.2.0</version>
    </dependency>

    <!-- Mybatis 和Spring的 整合包,是mybatis出的-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.2.3</version>
    </dependency>
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.11</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <!-- 下面两个包 commons-dbcp,commons-pool 是配置数据源的包-->
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3</version>
    </dependency>

    <dependency>
      <groupId>commons-pool</groupId>
      <artifactId>commons-pool</artifactId>
      <version>1.4</version>
    </dependency>


    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.2</version>
    </dependency>
    <!-- 下面的三个包是在配置事务的时候用到的 spring的依赖包  -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.7.0</version>
    </dependency>
    <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.1</version>
    </dependency>
   <!--jackson  GSON  fastJSON json-lib  -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.7.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.7.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.7.4</version>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
    <finalName>crud-demo</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- 配置Tomcat插件 -->
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <configuration>
            <!-- 指定端口 -->
            <port>9009</port>
            <!-- 请求路径 -->
            <path>/</path>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
第三步:引入相关的配置文件(springmvc.xml applicationContext.xml sqlMapConfig.xml db.properties )

在这里插入图片描述

第四步:编写web.xml文件

备注:不要用原始的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">

  <display-name>taotao-web</display-name>
  <filter>
    <filter-name>character</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>character</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- 加载spring的配置 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <!-- 配置前端控制 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 加载springmvc配置文件
           springmvc加载默认springmvc配置文件:
               命名规范:servlet-name-servlet.xml======springmvc-servlet.xml
               路径规范:必须放在WEB-INF文件夹下面。
    -->
    <!-- 加载springmvc配置文件 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <!-- 去掉扩展名 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>
第五步:编写接口文件
public interface UserService {
    //查询所有用户
    public List<User> findAll();
}
第六步:编写实现类
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.findAll();
    }
}
第七步:编写Controller层
@Controller  //@Resposebody @Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/findAll")
    public String findAll(Model model){
        List<User> list = userService.findAll();
        model.addAttribute("list",list);
        return "show";
    }
第八步:编写jsp页面
<table>
    <tr>
        <td>编号</td>
        <td>姓名</td>
        <td>密码</td>
        <td>地址</td>
    </tr>
   <c:forEach items="${list}" var="user">
       <tr>
          <td>${user.id}</td>
          <td>${user.username}</td>
           <td>${user.password}</td>
           <td>${user.address}</td>
       </tr>
   </c:forEach>
</table>

第九步:后端测试
在这里插入图片描述
说明后端获取数据成功
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值