Maven 自问自答

    xiaoxiao2026-03-07  6

    Maven 自问自答

    Maven 自问自答 maven有什么用POM 是一个什么东西解读pomBuild Lifecyclemaven 三条指令运行web项目maven常用指令maven结构maven快照版是什么dependency中的scope含义maven坐标是什么versionClassifier定义version的版本多模块中统一一些依赖推荐学习链接

    Apache Maven,作为一个项目管理和综合的工具,说起来很尴尬,一直以来,我都是把他当成一个依赖管理的工具而已,方便的地方就是我不用到处找jar包。同时,我还把他和IDE工具紧密的依赖在一起,每次都是用IDE工具去生成maven,这样看起来真的很糟糕,所以,写这篇自问自答来补全一下知识。

    maven有什么用

    maven作为一个项目构建和管理的工具,提供了帮助管理、构建、文档、报告、依赖、发布、分发的方法,可以方便的编译代码、进行依赖管理、管理二进制库等等,有利于项目过程的规范化、自动化、高效化、增强了可扩展性。

    POM 是一个什么东西

    project object model ,项目对象模型。pom中包含了项目的信息和maven build项目所需要的配置信息,通常有项目信息、依赖、插件、goal、build等等。pom是可以被继承的,因此有扩展性。

    解读pom

    <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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.chen</groupId> <artifactId>my_spring_boot</artifactId> <packaging>war</packaging> <name>my_spring_boot Maven Webapp</name> <url>http://maven.apache.org</url> <!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>0.5.0.BUILD-SNAPSHOT</version> </parent> <!-- Add typical dependencies for a web application --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <!-- Package as an executable JAR --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <!-- Allow access to Spring milestones and snapshots --> <!-- (you don't need this if you are using anything after 0.5.0.RELEASE) --> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories> </project>

    modelVersion:是object model版本,除非maven开发者升级版本,否则不需要修改。 groupId:指的是项目构建团体或组织唯一标识符,通常是域名倒写。 artifactId:指的是项目名。 package:指的是打包方式:jar、war、ear等等,默认jar。 version artifact:通常是0.0.1-SNAPSHOT,开发版。 name:maven文档中,目的展示名。 url:项目地址。 dependencies:依赖。 parent:父类的pom。 snapshot :快照仓库。 pluginRepositories:插件仓库。

    Build Lifecycle

    一个项目build的过程。maven的Build Lifecycle分为三种,分别为default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不同的lifecycle。

    maven 三条指令运行web项目

    mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=packageName -DartifactId=webappName 示例: mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.chen.web -DartifactId=my_maven

    cd my_maven

    mvn tomcat:run -Dmaven.tomcat.port=8080

    maven常用指令

    mvn compile:编译源代码 mvn test-compile:编译测试代码 mvn clean:清空 mvn test:运行测试 mvn package:打包项目 mvn install:安装打包的jar到本地仓库 mvn clean package:清楚target再打包

    maven结构

    my-app |--pom.xml |--src |--main |--java |--com |--mycompany |--app |--App.java |--test |--java |--com |--mycompany |--app |--AppTest.java

    maven快照版是什么

    如果maven依赖都是release,那么每次更新以来都是要更换版本才能下载,这样就麻烦了,比如 你依赖的依赖是处于开发期中的,那么每次他修改一次代码(会很频繁),就要升级一次版本,所以maven2推出了snapshot快照仓库和release发布仓库。

    dependency中的scope含义

    maven打包的时候,是否进行打包。 -compile:默认范围 -provided:说明jdk或容器已经提供这依赖 -runtime:运行和测试需要,编译不需要 -test:测试需要 -system:和provided一样

    maven坐标是什么

    坐标就是maven构件的定位。比如说junit:junit:4.8.2表示的就是仓库中的路径/junit/junit/4.8.2/junit-4.8.2.pom和/junit/junit/4.8.2/junit-4.8.2.jar这个文件。

    <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency>

    version

    <主版本>.<次版本>.<增量版本>-<限定符>

    Classifier

    <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>JDK15</classifier> </dependency>

    定义version的版本

    <dependency> <groupId>org.springframework</groupId> <artifactid>spring-beans</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactid>spring-context</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactid>spring-core</artifactId> <version>2.5</version> </dependency>

    以上代码可改为

    <properties> <spring.version>2.5</spring.version> </properties> <depencencies> <dependency> <groupId>org.springframework</groupId> <artifactid>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactid>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactid>spring-core</artifactId> <version>${spring.version}</version> </dependency> </depencencies>

    多模块中统一一些依赖

    <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactid>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactid>log4j</artifactId> <version>1.2.16</version> </dependency> </dependencies> </dependencyManagement>

    子模块就可以简化成

    <dependency> <groupId>junit</groupId> <artifactid>junit</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactid>log4j</artifactId> </dependency>

    推荐学习链接

    maven实战

    转载请注明原文地址: https://ju.6miu.com/read-1307723.html
    最新回复(0)