maven 入门笔记

最近的项目中接触到一些没有任何框架的项目需要打 jar 包的问题。
发现原先使用框架一键打包的背后,其实有挺多知识点可以学习,这里记录一下 IT 新人的一点点学习笔记。

Maven 是什么

Maven官网
官网中是这样介绍 Maven 的:

Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从中心信息段管理项目的构建、报告和文档。

我个人的通俗理解是,Maven 是一个 Java 的包管理工具及打包工具,让你可以方便的从远程仓库获取依赖包及打包工程。这样就有了一个统一的权威的公共包仓库,避免了很久以前那种满世界找依赖包还要担心是不是被人改过有问题的尴尬场面。

Maven 的安装

Maven 安装网上已经有很多教程了,就不复述,直接引用了
Maven 安装

Maven 在线仓库

现在我有了 Maven,我应该怎么使用他找到我要的依赖包呢?
介绍一下在线的仓库可以方便的搜索到你想要的依赖包
Maven 在线仓库

Maven 语法

运行Maven的语法如下:
mvn [options] [<goal(s)>] [<phase(s)>]
所有可用选项都记录在内置的帮助中,您可以使用这些帮助进行访问
mvn -h
构建Maven项目的典型调用使用Maven生命周期阶段。 例如。
mvn package

命令 说明
mvn compile 编译Java源代码
mvn package 打包Java项目
mvn deploy 将Java项目发布到Maven仓库
mvn clean 删除构建目录

新建一个 Maven 项目

File -> new -> Project
在这里插入图片描述
选择 Maven 项目
在这里插入图片描述
输入 GroupId(组织 ID,一般为 com.公司名) ArtifactId(项目ID),还有项目版本
在这里插入图片描述
然后 Finish 创建项目
在这里插入图片描述

pom.xml文件是Maven中项目配置的核心。 它是一个配置文件,其中包含以所需方式构建项目所需的大多数信息。 POM非常庞大,其复杂性可能令人畏惧,但不必有效地使用它就不必了解所有复杂性。 该项目的POM为:

引用依赖

在本文上面提供的 Maven 在线仓库中搜索依赖 junit
在这里插入图片描述
选择自己要的版本
在这里插入图片描述
复制依赖
在这里插入图片描述
复制到项目中,如果没有标签的话可以像图中加入,点击右下角导入变化,等包下载完成就会发现右侧依赖中 junit 已经下载完成

同样的方法查询 fastjson (阿里巴巴的 json 工具类)用于测试使用

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

在这里插入图片描述
也可以设置自动导入,这样之后 Pom 文件有修改就会自动重新导入依赖

新建自己的测试方法类

import com.alibaba.fastjson.JSONObject;

public class test {

    public void test(){
        JSONObject json = new JSONObject();
        json.put("meg","这里是 testDemo1的 json 数据");
        System.out.println(json.toJSONString());
    }

    public static void main(String[] args) {
        JSONObject json = new JSONObject();
        json.put("meg","这里是 testDemo1 主方法中的 的 json 数据");
        System.out.println(json.toJSONString());
    }
}


在这里插入图片描述

打 jar 包

这里使用 maven-assembly-plugin 插件进行打包

    <build>
        <plugins>
            <!-- 跳过依赖 -->
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <!-- 设置打包 jdk -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArguments>
                        <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
                    </compilerArguments>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!--正常打包-->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <!-- jar 包 主入口方法 指向刚刚写的 test 方法-->
                        <manifest>
                            <mainClass>test</mainClass>
                        </manifest>
                        <!-- 打包时加入本地 jar 包-->
                        <!--<manifestEntries>-->
                            <!--<Class-Path>lib/*.jar</Class-Path>-->
                        <!--</manifestEntries>-->
                    </archive>
                    <descriptors>
                        <!--assembly配置文件路径,注意需要在项目中新建文件assembly/release.xml-->
                        <descriptor>${basedir}/src/main/resources/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述

在 resources 文件夹下添加配置文件
在这里插入图片描述

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>release</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>true</unpack>
            <scope>runtime</scope>
        </dependencySet>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>true</unpack>
            <scope>system</scope>
        </dependencySet>
    </dependencySets>
</assembly>

点击右侧 package,等待打包结束后,会在 target 目录下生成 testDemo1-1.0-SNAPSHOT-jar-with-dependencies.jar ,这个就是我们打出来的包含依赖的 jar 包
在这里插入图片描述

验证 jar 包

打开终端
在这里插入图片描述
运行 jar 包主函数

java -jar testDemo1-1.0-SNAPSHOT-release.jar

可以看到,执行了 test 类中的 Main 方法,使用了 fastjson 的依赖打印
在这里插入图片描述

其他项目引用 jar 包

重复上面新建 Maven 项目的教程,新建项目 testDemo2

添加本地 jar 包

创建 lib 文件夹并添加刚刚打包出的 jar 包
在这里插入图片描述

添加依赖及打包插件

完整 pom 代码,注意要插件中添加本地依赖,否则打 jar 包时不会添加本地 jar 包依赖

<?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.test</groupId>
    <artifactId>testDemo2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- 引入本地依赖 -->
        <dependency>
            <groupId>org.test</groupId>
            <artifactId>testDemo1</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/testDemo1-1.0-SNAPSHOT-release.jar</systemPath>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 跳过依赖 -->
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <!-- 设置打包 jdk -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArguments>
                        <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
                    </compilerArguments>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!--正常打包-->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <!-- jar 包 主入口方法 指向刚刚写的 test 方法-->
                        <manifest>
                            <mainClass>test2</mainClass>
                        </manifest>
                        <!-- 打包时加入本地 jar 包-->
                        <manifestEntries>
                            <Class-Path>lib/*.jar</Class-Path>
                        </manifestEntries>
                    </archive>
                    <descriptors>
                        <!--assembly配置文件路径,注意需要在项目中新建文件assembly/release.xml-->
                        <descriptor>${basedir}/src/main/resources/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

添加测试类

public class test2 {
    public static void main(String[] args) {
        System.out.println("执行到了 testDemo2 主函数");
        new test().test();
    }
}

在这里插入图片描述
运行 main 函数

可以看到已经成功调用到了 jar 包内的 test 方法
在这里插入图片描述

打包及测试

运行
在这里插入图片描述

java -jar testDemo2-1.0-SNAPSHOT-release.jar

在这里插入图片描述
可以看到,已经成功调用到了 testDemo2 项目的主函数,并且调用了 testDemo1 中的 test 方法,使用了 fastjson 依赖构建 json 并打印

发布了12 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/brucelpt/article/details/102520653