您现在的位置是:首页 > 正文

【maven】自定义构建maven的jar包依赖

2024-02-01 06:43:55阅读 3

在这里插入图片描述

前言

Maven 是一个开源的项目管理和构建自动化工具,主要用于Java项目的构建、依赖管理以及报告和文档生成。Maven 通过提供一套标准化的项目结构和生命周期来简化和规范软件开发过程。

Maven可以构建自定义的 jar 包依赖本文阐述自己定义自己的maven的jar包依赖,本地版本(不在中央仓库中的第三方库)。

实现

pom.xml

pom.xml

<?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>org.example</groupId>
    <artifactId>maven-dependency-learning</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- validation -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.2.0</version>
        </dependency>

    </dependencies>


    <distributionManagement>
        <repository>
            <id>central</id>
            <name>XXX-release</name>
            <url>http://xx.xxxx.com.cn:80/artifactory/XXX-release/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>XXX-snapshot</name>
            <url>http://xx.xxxx.com.cn:80/artifactory/XXX-snapshot/</url>
        </snapshotRepository>
    </distributionManagement>


    <build>
        <plugins>
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <attach>true</attach>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

这里的maven-source-plugin依赖,build插件中的配置很重要。

spring.factories

我们在配置文件中把Configuration类配置到springboot的自动配置中,这里配置的每一个×××AutoConfiguration 都作为容器中的一个组件,被添加到IoC 容器中,从而实现Spring Boot 的自动配置。

spring.factories

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zwy.maven.learning.AutoConfiguration

AutoConfiguration.java

定义我们的配置类:

AutoConfiguration.java

package com.zwy.maven.learning;

import org.springframework.context.annotation.ComponentScan;

@ComponentScan(
    basePackages = {"com.zwy.maven.learning"}
)
public class AutoConfiguration {
    public AutoConfiguration() {
    }
}

@ComponentScan 注解用于指定 Spring 容器需要扫描的包,以将带有 @Component、@Service、@Repository 或 @Controller 等注解的类作为 Bean 进行管理。通过使用 @ComponentScan可以控制哪些包中的组件(Bean)应该被自动检测并注册到 Spring IoC 容器中

utils.TestUtil

编写我们的工具函数

TestUtil.java

package com.zwy.maven.learning.utils;

public class TestUtil {

    private static final String TEST_STRING = "test";

    // 返回字符串
    public static String returnString() {
        return "通用代码库测试:返回字符串";
    }
}

application.properties

application.properties

server.port=8080

项目结构

自定义的jar包的项目结构如下:

在这里插入图片描述

打包

将我们自定义的maven依赖打包,打包安装到本地maven库,依次执行:

mvn clean

在这里插入图片描述

mvn package

在这里插入图片描述

mvn install

在这里插入图片描述
可以看到maven把我们的jar包部署到本地maven库中。

我们在打印日志里可以拿到jar包地址,jar包安装地址其实是自己定义好的:

C:\Users\32610\.m2\repository\org\example\maven-dependency-learning\1.0-SNAPSHOT\maven-dependency-learning-1.0-SNAPSHOT.jar

找出来看看,可以看到我们安装在本地maven库的jar包

在这里插入图片描述

引入依赖

在我们的测试项目引入刚刚自定义的jar包依赖:


    <dependency>
        <groupId>com.zwy.maven.learning</groupId>
        <artifactId>maven-dependency-learning</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

在这里插入图片描述

打开命令行,在需要引入的项目中使用以下命令:

mvn install:install-file -Dfile=C:\Users\32610\.m2\repository\org\example\maven-dependency-learning\1.0-SNAPSHOT\maven-dependency-learning-1.0-SNAPSHOT.jar

在这里插入图片描述

还有其他方法:

mvn install:install-file -Dfile=C:\Users\32610\.m2\repository\org\example\maven-dependency-learning\1.0-SNAPSHOT\maven-dependency-learning-1.0-SNAPSHOT.jar -DgroupId=org.example -DartifactId=maven-dependency-learning -Dversion=1.0-SNAPSHOT -Dpackaging=jar

mvn install 完之后,然后再reload pom.xml文件:

在这里插入图片描述

这个时候自定义的jar包依赖就导入进来了。

测试

代码测试一下,在controller中直接引入我们写得TestUtil的函数:

package org.example.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.zwy.maven.learning.utils.*;

@RestController
public class HelloController {

    @RequestMapping("/sayHello")
    public String sayHello(){
        return TestUtil.returnString();
    }
}

在这里插入图片描述

启动项目

在这里插入图片描述

调用接口测试一下:

在这里插入图片描述

成功!

网站文章

  • 谷歌裁员1.2万人,CEO年薪达15亿,网友:“地表最强 CEO !”

    谷歌裁员1.2万人,CEO年薪达15亿,网友:“地表最强 CEO !”

    在竞争激烈的科技行业,大佬的薪酬往往是敏感话题。年初时,曾拿下 1.25 亿美元年终奖的“地表最强打工人”、苹果公司 CEO 库克,因降薪 40%的话题登上热搜,让大家倍感惊讶。(图源:彭博社截图)4...

    2024-02-01 06:43:24
  • Java 的引用

    在 Java 中引用可以分为强引用、软引用、弱引用、虚引用。

    2024-02-01 06:43:17
  • 医学计算机应用研究的意义,肝CT图像分析的临床与计算机应用研究

    摘要:目的:研究肝硬化CT肝实质形态分级与CT肝脾容积测量相结合对肝硬化CT定量诊断和肝切除术前肝储备功能评估的临床应用价值,并探索计算机自动测量的方法及其可行性. 方法:(1) 用CT机分别测量50...

    2024-02-01 06:43:10
  • springBoot中实现分页查询

    SpringBoot中实现条件分页查询

    2024-02-01 06:43:03
  • 阿里云ECS服务器挂载磁盘 热门推荐

    阿里云ECS服务器挂载磁盘 热门推荐

    买了阿里云的ECS云服务器,本机赠送20GB的磁盘,感觉不够用,又买了一块500GB的磁盘,本文就是记录怎么把这500GB的磁盘挂载上。 检查现在磁盘情况 我们可以看到买的那个500GB的磁盘没有出现,说明没有挂载上。 查看硬盘个数及分区 我们可以看到那块500GB的磁盘:/dev/xvdb 对这块500GB的硬盘进行分区 再次查看磁盘个数及分区 可以看到新的分区:/dev/xvd

    2024-02-01 06:42:34
  • 使用过滤器(Filter)解决乱码问题

    使用过滤器解决中文乱码问题一:常规方法 (1)Post提交方式1.第一种用法:使用xml配置文件//配置文件,在web.xml中写入如下代码 MyFilterConfig com.zzz.MyFilterConfig encoding UTF-8 //在Servlet中写入如下代码request.s

    2024-02-01 06:42:30
  • MIT CS6.006 最短路径专题

    MIT CS6.006 最短路径专题

    单源最短路径·找出一个带权有向图从起点到终点权重和最小的路径。几个变体:1.单目的地最短路径问题2.单结点对最短路径问题3.所有节点对最短路径问题一个隐藏的重要性质:两个节点之间的一条最短路径也包含着...

    2024-02-01 06:42:22
  • 在ubuntu环境下安装cpu版本的tensorflow

    环境要求:ubuntu14.04 64位、 因为要使用分布式深度学习平台,这里选择了tensorflow,我的电脑是ATI的显卡,所以这里记录的是安装cpu版本的tensorflow,其具体安装过程如下: (1)安装anaconda(这是一个很好的python编程的IDE,具体安装过程请参见其他资料); (2)安装conda环境。好处是conda环境能够把不同的python工程所需的依赖库隔...

    2024-02-01 06:41:51
  • Java接受blob类型图片_原生JS上传图片接收服务器端图片并且显示图片(主要描述blob类型)...

    Java接受blob类型图片_原生JS上传图片接收服务器端图片并且显示图片(主要描述blob类型)...

    1.了解后端处理图像的方式一:图片以独立文件的形式存储在服务器的指定文件夹中,再将路径存入数据库字段中二:将图片转换成blob,直接存储到数据库的 Image 类型字段中(这种方式负担很大不建议使用)...

    2024-02-01 06:41:44
  • startService, bindService区别和总结

    service有2种启动方式,startService和bindService。知识点包括以下几个方面:一. 生命周期 (一) startService生命周期 1. onCreate() –&gt;...

    2024-02-01 06:41:38