欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Maven的简单使用一

程序员文章站 2024-03-22 16:36:40
...

Maven

maven的命令格式如下:

mvn [plugin-name]:[goal-name]

该命令的意思是:执行“plugin-name”插件的“goal-name”目标(或者称为动作)。
https://blog.csdn.net/moshenglv/article/details/52027106

Maven的默认*仓库:

Maven的简单使用一
当构建一个Maven项目时,首先检查pom.xml文件以确定依赖包的下载位置,执行顺序如下:

1、从本地资源库中查找并获得依赖包,如果没有,执行第2步。

2、从Maven默认*仓库中查找并获得依赖包(http://repo1.maven.org/maven2/),如果没有,执行第3步。

3、如果在pom.xml中定义了自定义的远程仓库,那么也会在这里的仓库中进行查找并获得依赖包,如果都没有找到,那么Maven就会抛出异常。

默认*仓库的地址:

1、http://repo1.maven.org/maven2/

2、以上地址还配有搜索页面:http://search.maven.org/

3、如果想要向*仓库提交自己的依赖包,可以很肯定的告诉你,此功能可以实现;参考:http://www.cnblogs.com/EasonJim/p/6671419.html

maven创建java项目:

https://blog.csdn.net/u012660464/article/details/53158776

maven查看插件信息:
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-archetype-plugin
根据Goal Prefix得知,这个插件有别名,所以就可以使用别名
mvn help:describe -Dplugin=archetype
Maven的简单使用一

比如使用archetype的generate目标创建最简单的项目
mvn archetype:generate

但是它却很慢,因为:
Maven的简单使用一

使用本地的原型文件
所以提前下载archetype-catalog.xml
https://repo.maven.apache.org/maven2/archetype-catalog.xml
下载好以后放在C:\Users\Mustang.m2\repository\目录下
https://www.cnblogs.com/buhaiqing/archive/2012/11/04/2754187.html

然后输入:mvn archtype:generate -DarchetypeCatalog=local
使用本地的archetype-catalog.xml
但是目标有2000多条,太多了怎么办?

使用maven内置的原型文件
mvn archetype:generate -DarchetypeCatalog=internal
只有七个目标
使用第七个项目模板
Maven的简单使用一
创建后的项目架构
Maven的简单使用一

maven导入eclipse

无法导入,因为用maven创建的项目没有.project 和 .classpath 文件
Maven的简单使用一

cmd 中输入mvn help:describe -Dplugin=eclipse
发现eclipse:eclipse命令能创建.project 和 .classpath 文件
Maven的简单使用一

cmd 切到项目根目录
Maven的简单使用一

生产了这两个文件,这样eclipse就能识别order项目
Maven的简单使用一

如果导入的项目报错,检查是否有M2_REPO 变量,如果没有就如下操作:
Maven的简单使用一
Maven的简单使用一

maven导入idea

首先删除刚才生产的eclipse的配置文件
进入order项目输入 mvn eclipse:clean
然后使用 mvn help:describe -Dplugin=idea 查看目标信息
使用 idea:idea 然后生成的idea的配置文件
Maven的简单使用一

maven编译:

进入项目根目录输入 mvn compiler:compile
Maven的简单使用一

maven测试:

mvn compiler:testCompile 编译测试java文件
mvn surefire:test 运行测试class文件
执行surefire:test 必须要经过编译后的class文件才行
Maven的简单使用一
Maven的简单使用一
这里运行了两个Test测试单元
Maven的简单使用一
运行一个Test测试单元
Maven的简单使用一

Maven生命周期:
https://blog.csdn.net/luanlouis/article/details/50492163
有三个内置的生命周期:默认(default),清洁(clean)和站点(site)。
默认构建生命周期(Default Lifeclyle): 该生命周期表示这项目的构建过程,定义了一个项目的构建要经过的不同的阶段。

清理生命周期(Clean Lifecycle): 该生命周期负责清理项目中的多余信息,保持项目资源和代码的整洁性。一般拿来清空directory(即一般的target)目录下的文件。

站点管理生命周期(Site Lifecycle) :向我们创建一个项目时,我们有时候需要提供一个站点,来介绍这个项目的信息,如项目介绍,项目进度状态、项目组成成员,版本控制信息,项目javadoc索引信息等等。站点管理生命周期定义了站点管理过程的各个阶段。

Maven的简单使用一

执行生命周期compile:mvn compile
Maven的简单使用一

Maven命令分类:插件命令和生命周期命令
生命周期阶段命令是插件命令的有序集合。
插件命令是单独的,生命周期命令是把很多插件命令组合在一起,是固定的,比较省事,但是插件命令更灵活。

maven打包

mvn package
但是如果想打包出来的文件包含第三方jar包就使用插件:maven-shade-plugin 需要在pom.xml配置
Maven的简单使用一
然后在cmd使用mvn package
Maven的简单使用一

打包为可执行jar
META-INF/MANIFEST.MF 文件中,配置如下
Main-Class:xxx.xxx.xxx类名
http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#ManifestResourceTransformer
Maven的简单使用一

然后进入target目录cmd运行
D:\projects\order\target>java -jar order-1.0-SNAPSHOT.jar

pom.xml结构

    <!-- 第三方依赖包 -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
    </dependencies>

    <!-- 把shade插件绑定到package生命周期里面 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>com.oops.eshop.Pay</Main-Class>
                                        <X-Compile-Source-JDK>1.8</X-Compile-Source-JDK>
                                        <X-Compile-Target-JDK>1.8</X-Compile-Target-JDK>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

<!-- 指定当前pom的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 坐标  -->
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!-- 第一个0表示大版本号
       第二个0表示分支版本号
       第三个0表示小版本号
     0.0.1
     snapshot快照
     alpha内部测试
     beta公测
     Release稳定
     GA正式发布 -->
<version></version>
<!-- 默认是jar
     war zip pom -->
<packaging></packaging>
<!-- 项目描述名 -->
<name></name>
<!-- 项目地址 -->
<url></url>
<!-- 项目描述 -->
<description></description>
<!-- 开发人员表 -->
<developers></developers>
<!-- 许可证信息 -->
<license></license>
<!-- 组织信息 -->
<organization></organization>

<!-- 依赖 -->
<dependencies>
    <dependency>
        <groupId></groupId>
        <artifactId></artifactId>
        <version></version>
        <!-- 依赖范围  这个jar只存在于测试的范围
             compile:默认范围,编译测试运行都有效
             provided:在编译和测试时都有效 
             runtime:在测试和运行时有效
             test:在测试范围有效 比如junit
             system:与本机系统相关联,可移植性差
             import:导入的范围,它只是用在dependencyManagement中,表示从气他的pom中导入dependecy的配置-->
        <scope>test</scope> 
        <!-- 设置依赖是否可选 -->
        <optional></optional>
        <!-- 排除依赖传递列表 -->
        <exclusions>
            <exclusion>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

<!-- 依赖管理,定义在父模块,给子模块用的 -->
<dependencyManagement>
    <dependencies>
        <dependency></dependency>
    </dependencies>
 </dependencyManagement>

<build>
    <!-- 插件列表  -->
    <plugin>
        <groupId></groupId>
        <artifactId></artifactId>
        <version></version>

    </plugin>
</build>
<!-- 用于子模块对父模块的继承 -->
<parent></parent>
<!-- 聚合运行多个maven项目 -->
<modules>
    <module></module>
</modules>

在eclipse使用maven创建项目

Maven的简单使用一
Maven的简单使用一

编译
Maven的简单使用一
Maven的简单使用一

如果报错:
maven的[WARNING] Using platform encoding (UTF-8 actually) to copy filter
在项目中的pom.xml添加

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

Maven的简单使用一

如果报错:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile
Installed JREs的环境变量jre设置为jdk
Maven的简单使用一

相关标签: maven的简单使用