maven实战

本文记录实际使用maven遇到哪些问题,以及解决方案

一.单体maven项目main入口不会打包到jar(就是一个最普通的jar项目,不是springboot)

默认打包生成的jar是不能够直接运行的,因为带有main方法的类信息不会添加到manifest中(打开jar 文件中的META-INF/MANIFEST. MF文件,将无法看到Main-Class 一行)。为了生成可执行的jar文件,需要借助maven-jar-plugin配置该插件如下:

<build>
        <plugins>
            <!--      配置打包,并配置MainClass, 但不将依赖包打包,会出现找不到依赖的异常    -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <!--   MANIFEST.MF 中 Class-Path -->
                            <classpathPrefix>lib/</classpathPrefix>
                           <!--  main方法路径 -->  <mainClass>cn.zoom.wqz.filter.Application</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        
        </plugins>
    </build>

这里只是最简单的java程序打包,还有其他情况看https://www.jb51.net/article/215921.htm
或者根据实际情况去google

二spring boot使用maven的package命令打出来的包,却不包含依赖的jar包

问题原因:打包时使用了maven默认的maven-jar-plugin插件,而不是spring-boot-maven-plugin插件,它只会打包当前项目的代码

解决方法:
方法1. pom中必须配置spring-boot-maven-plugin插件,而且必须指定需要执行的目标构建
这种方式适用于,没有继承spring-boot-starter-paren,而是在dependencies模块中引用的
spring-boot-starter-parent

复制代码:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

复制代码
方法2. 使用spring boot的parent来进行依赖管理,则不用指定执行构建的目标

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.6.RELEASE</version>
</parent>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring.boot.version}</version>
        </plugin>
    </plugins>
</build>

三.为什么打包会有2个jar?

.origin后缀的jar包只包含当前项目源代码没有依赖jar包代码
所以需要spring-boot-maven-plugin的repackage打成可执行jar(也就是包含依赖jar文件)
具体看下面
https://www.jb51.net/article/198349.htm
https://wangsong.blog.csdn.net/article/details/95180256

四.maven 使用systemPath导入本地jar,使用package打包,java -jar运行找不到类?

https://blog.csdn.net/qq_38140292/article/details/125452482

build标签详解
https://heavy_code_industry.gitee.io/code_heavy_industry/pro002-maven/chapter09/verse04.html

maven入门

b站尚硅谷maven2022最新视频
https://www.bilibili.com/video/BV12q4y147e4?
maven实战 pdf一书中也讲解了很多知识

看到文章末尾的,可以看下的我的程序人生这篇文章,主要是讲我在编程这条路上的经历,祝愿对你有用,感谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值