精华内容
下载资源
问答
  • 放弃不难,但坚持很酷~环境说明:springboot:2.2.7jdk:1.8.0maven:3.6.3在平时的项目中,我们用到了 spring boot 默认的插件 spring-boot-maven-plugin 来进行打包,打的包是直接可执行的。但是这次,有一个多...
    71816e8d05d0473382746afcd180faac.gif

    每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。

    放弃不难,但坚持很酷~

    环境说明:

    springboot:2.2.7

    jdk:1.8.0

    maven:3.6.3

    在平时的项目中,我们用到了 spring boot 默认的插件 spring-boot-maven-plugin 来进行打包,打的包是直接可执行的。但是这次,有一个多模块项目,我负责其中一个模块的开发,开发完成之后,发现打的包直接执行报找不到主类,这就有点奇怪了,所以就有了这篇文章。

    让我们一起系统地总结下如何打成可执行 jar 包,另外也分享一下企业经常用的打包方式。

    一、打成可执行jar包

    如果你的项目工程,不能制作为可执行 jar 包,即执行 java -jar xxx.jar 报错,可以尝试下我的 pom 配置。

    pom 关于打包的配置如下所示:

    UTF-8

    true

    org.springframework.boot

    spring-boot-maven-plugin

    2.2.7.RELEASE

    com.xxx.xxx.DataCenterProxyApplication

    repackage

    org.apache.maven.plugins

    maven-compiler-plugin

    1.8

    1.8

    一般 spring boot 工程会自带 spring-boot-maven-plugin 这个插件,它是继承的父工程 spring-boot-starter-parent 的 spring-boot-maven-plugin 插件,父 pom 中的 spring-boot-maven-plugin 插件定义为:

    f23a64fd7b4a068cda0594a32bd7fd55.png

    如果在项目 pom 文件中,没有继承 spring-boot-starter-parent 的话,那么 spring-boot-maven-plugin 插件就没有了继承关系,所以只能自己手动指定主类加载,手动设置 goal 为 repackage 。

    设置好以后,通过 idea 工具可以看到 maven 中包含了 spring-boot-maven-plugin 插件:

    7e5b82a7bc68df791ecd97f01f65b219.png

    功能说明:

    • build-info:生成项目的构建信息文件 build-info.properties
    • repackage:这个是默认 goal,在 mvn package执行之后,这个命令再次打包生成可执行的 jar,同时将mvn package生成的 jar 重命名为*.origin。
    • run:这个可以用来运行 Spring Boot 应用
    • start:这个在 mvn integration-test阶段,进行Spring Boot应用生命周期的管理
    • stop:这个在 mvn integration-test阶段,进行Spring Boot应用生命周期的管理

    打出来的可执行 jar 包,目录结构为:

    093ad52915fbb37af63735813c6f0e13.png

    其中 BOOT-INF 主要是一些启动信息,包含 classes 和 lib 文件,classes 文件放的是项目里生成的 class 字节文件和配置文件,lib 文件是项目所需要的 jar 依赖。

    META-INF 目录下主要是 maven 的一些元数据信息,MANIFEST.MF 文件内容如下:

    Manifest-Version: 1.0

    Implementation-Title: spring-xxx-project

    Implementation-Version: 0.0.1

    Start-Class: com.example.CustomApplication

    Spring-Boot-Classes: BOOT-INF/classes/

    Spring-Boot-Lib: BOOT-INF/lib/

    Build-Jdk-Spec: 1.8

    Spring-Boot-Version: 2.2.2.RELEASE

    Created-By: Maven Archiver 3.4.0

    Main-Class: org.springframework.boot.loader.JarLauncher

    其中 Start-Class 是项目的主程序入口,即 main 方法。Springboot-Boot-Classes 和 Spring-Boot-Lib 指向的是生成的 BOOT-INF 下的对应位置。

    这样的 jar 包,我们可以直接使用 java -jar xxx.jar 命令来启动。

    二、企业经常用的打包方式

    其实在大数据项目中,用的打包插件以 maven-assembly-plugin居多,因为大数据项目中往往有很多 shell 脚本、sql 脚本、.properties 及 .xml 配置项等,采用 assembly 插件可以让输出的结构清晰而标准化

    1、项目目录

    fac16a40eb72bbc202e9d8578fd6fd37.png

    2、pom 文件依赖

    org.apache.maven.plugins

    maven-assembly-plugin

    2.5.5

    utf-8

    false

    src/main/build/package.xml

    make-assembly

    package

    single

    3、集成过程(package.xml)

    package

    tar.gz

    data-xxx-xxx

    src/main/bin

    bin

    *.*

    0755

    unix

    src/main/resources

    conf

    logs

    logs

    lib

    runtime

    按照以上配置打包好后,将 .tar.gz 文件上传到服务器,解压之后就会得到 bin、conf、lib 等规范化的目录结构,十分方便。

    4、打包后 .tar.gz 解压后的目录

    a0b1c46a090f2638044beceb586fb393.png

    解压完以后,可以执行 bin 目录下的 start.sh 脚本来启动服务。启动 jar 包的命令如下:

    java -Xmx800m -Xms512m -cp :/opt/xxx/lib/*:/opt/xxx/conf com.example.CustomApplication

    4836d26abff249043d0002fb95b132a9.png

    三、后续

    但是在使用过程中,我发现修改 conf 里面的 yml 配置文件没有生效:

    5e4225738d6e31b4d89c9b7e0c797983.png
    5266a5ee8e765ea43a9805ba37f6183a.png

    经过排查之后才发现,生成的 jar 包文件中,有相关 yml 文件,所以修改 conf 目录才会不生效。

    那我们应该在打 jar 包的时候,将相关配置文件给排除掉,这样,启动的时候再指定 conf 目录就可以实时读取 conf 目录的配置了。

    我们可以使用 maven-jar-plugin 插件来设置排除文件:

    org.apache.maven.plugins

    maven-jar-plugin

    3.0.2

    *.conf

    *.yml

    *.xml

    *.properties

    上述配置在打 jar 包时,就排除了 resources 目录下的 conf、yml、xml、properties 文件。

    然后项目再重新打包,将生成的 jar 包替换到 lib 目录下即可。

    这时候修改 conf 的配置文件后,再启动 jar 包,配置就会直接生效了。

    1e64a04ed55f43da05b2ccdee87ba923.png

    四、总结

    1、如果需要打成可执行 jar 包的话,可以使用 spring boot 的打包插件:spring-boot-maven-plugin 。

    2、不过还是推荐第二种打包方式,因为使用很方便,特点如下:

    • 可以将 jar 包操作脚本写入到 bin 目录下,方便程序的启动与停止。
    • 将配置文件与 jar 包解耦,如果需要修改配置文件(比如 application-test.yml、logback-spring.xml)的话,直接修改 conf 目录,然后重启 jar 包即可(前提是需要将 jar 包里面的配置文件给排除掉)。
    • 目录层级明显,依赖的 jar 包都在 lib 目录下。

    点关注,不迷路

    好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才

    白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

    如果本篇博客有任何错误,请批评指教,不胜感激 !

    朕已阅

    1c3798cb1fe0883f6d36a844ea7068e5.gif
    展开全文
  • 很多人好奇maven用的好好的为什么切换到gradle? Spring Boot 团队给出的主要原因是,迁移至 Gradle 可以减少构建项目所花费的时间。 而 Gradle 的宗旨是减少构建工作量,它可以根据需要构建任何有变化的地方或者...

    前言

    很多人好奇maven用的好好的为什么切换到gradle?
    Spring Boot 团队给出的主要原因是,迁移至 Gradle 可以减少构建项目所花费的时间
    而 Gradle 的宗旨是减少构建工作量,它可以根据需要构建任何有变化的地方或者并行构建。当然,Spring Boot 团队也花了很多时间来尝试用 Maven 进行 并行构建,但因为构建 Spring Boot 项目的复杂性,最终失败了。
    另外,Spring Boot 团队也看到了在其他 Spring 项目中使用 Gradle 以及并行构建所带来的提升,并且还可以使用 Gradle 在一些第三方项目上的构建缓存,这些优势都促使 Gradle 带到构建 Spring Boot 项目中来。
    以下是springboot 官方给的maven构建时间对比:
    在这里插入图片描述
    Spring Boot 官方也给出了数据,一次完整的 Maven 项目构建一般需要一个小时或者以上,而在过去的 4 周时间内,使用 Gradle 构建的平均时间只用了 9 分 22 秒!!!

    对现有项目的已影响

    很多小伙伴可能要说,既然springboot的趋势是想切换的到gradle来,那么我目前手中的项目是用maven构建的,有何影响?
    虽然官方已经支持gradle了,但是目前使用的maven构建项目仍然可以继续使用,没有任何影响。但小编鼓励大家尝试下gradle,或许你会像当初从eclipse转idea一样,爱上gradle了。

    springboot 使用gradle步骤

    一. 安装gradle:

    gradle -v
    

    二. idea 新建gradle项目

    1. 新建gradle项目:
      在这里插入图片描述
    2. 点击finish
      在这里插入图片描述
    3. 点击idea 默认识别的帮助:OK(idea自动下载构建)
      在这里插入图片描述
      在这里插入图片描述
    展开全文
  • 2.4版本之前的配置 感觉问题特多,研究了一天 最终还是放弃,反正idea 默认都是2.6版本了 直接用用新环境,基础不好 ,网上找了好多资料 又没有人指导 少走点弯路 1、配置文件 application.yml 配置 spring: ...

    Idea springboot 多配置环境启动

    Springboot 版本2.4以上版本
    2.4以上版本更新了 多环境开发部署环境
    2.4版本之前的配置 感觉问题特多,研究了一天 最终还是放弃,反正idea 默认都是2.6版本了 直接用用新环境,基础不好 ,网上找了好多资料 又没有人指导 少走点弯路

    1、配置文件
    application.yml 配置
    在这里插入图片描述

    spring:
      profiles:
        active: "dev"
    
    ---
    #测试环境
    spring:
      config:
        activate:
          on-profile: "dev"
      datasource:
        name: user   #数据库名
        url: jdbc:mysql://127.0.0.1:3306/demo #url
        username: root  #用户名
        password: 123456  #密码
        driver-class-name: com.mysql.jdbc.Driver
    mybatis:
      mapper-locations: classpath:dao/*.xml  #扫描文件
      type-aliases-package: com.demo.pojo,;com.demo.packagepojo
    server:
      port: 9015
    ---
    
    #生产环境
    spring:
      config:
        activate:
          on-profile: "prod"
      datasource:
        name: user   #数据库名
        url: jdbc:mysql://127.0.0.1:3306/demo2 #url
        #url: jdbc:mysql://127.0.0.1:3306/stone2 #url
        username: root  #用户名
        password: 123456  #密码
        driver-class-name: com.mysql.jdbc.Driver
    mybatis:
      mapper-locations: classpath:dao/*.xml  #扫描文件
      type-aliases-package: com.demo.pojo,;com.demo.packagepojo
    server:
      port: 9016
    

    2、idea 启动配置 不配置默认以激活的环境运行
    配置设置
    在这里插入图片描述
    启动页面有标识环境

    在这里插入图片描述
    idea中我配置的是 生产环境 配置文件中默认激活的是开发环境
    启动显示就回事生产环境了

    3、启动设置
    打包完之后 启动命令

    比如以生产环境运行
    java -jar -Dspring.profiles.active=prod dataOnline.jar

    以开发环境运行
    java -jar -Dspring.profiles.active=dev dataOnline.jar

    在这里插入图片描述

    展开全文
  • 在 2.3.0 中对 Spring Boot 进行了相当重大的更改,这是使用 Gradle 而非 Maven 构建的项目的第一个版本。 Spring 的每个项目都独立的项目组在开发运营,在用户最常使用的白盒部分(例如 API 设计)保持一致性,对于...

    在 2.3.0 中对 Spring Boot 进行了相当重大的更改,这是使用 Gradle 而非 Maven 构建的项目的第一个版本。

    Spring 的每个项目都独立的项目组在开发运营,在用户最常使用的白盒部分(例如 API 设计)保持一致性,对于用户不可见的黑盒部分,各个项目组选择自己适合工具没有统一的约定。

    例如: 项目构建工具。Spring Framework 自 2012 年的 3.2.0 起就使用 Gradle 构建,而一年后开始使用 Spring Boot,此后不久又开始使用 Spring Cloud,两者都基于 Maven。

    项目构建工具
    Spring FrameworkGradle
    Spring BootMaven
    Spring CloudMaven

    为什么要切换

    Spring Boot 团队考虑由 Maven 切换到 Gradle 的主要原因为了减少构建项目所需的时间。在开发和测试过程中,等待构建完成所花费的时间增加了修复错误和实现新功能所花费的时间。

    为了解决这个问题,团队曾尝试利用 Maven 对并行构建的支持。由于 Spring Boot 构建的复杂性,特别是对 Invoker 插件的使用,尝试失败。通过将构建分为四个部分来解决 CI 问题。首先构建项目的主要核心,然后并行构建三个独立的部分。但 CI 的构建仍需要一个小时或更长时间。此外,由于针对的是模块化 CI 构建,因此并没有使得开发人员本地构建效率有所改变。

    Spring Boot 团队在其他利用 Gradle 作为构建工具的 Spring 项目中看到了 Gradle 的增量并行构建以及在第三方项目中看到了 Gradle 的构建缓存的好处。希望通过使用 Gradle 为 Spring Boot 构建获得类似的好处。

    Gradle 具有非常灵活的构建模型,并且可以定义每个任务的输入和输出及其相互依赖性。这种构建模型的好处是,它允许任务并行运行,同时也可以增量、缓存或完全跳过。换句话说,Gradle 可以最小化的执行必要的 CI 任务。虽然可以使用了 Gradle Enterprise 的 Maven 支持,我们也可以享受构建缓存和跳过的好处。但是要充分享受这四个方面的好处,必须尝试切换到 Gradle。

    如何切换

    Gradle 配置过于灵活,导致它的构建比基于 Maven 构建更难以维护和理解。例如: 同一个构建结果,可以通过不同的配置实现。如果切换到 Gradle,需要避免这种情况。从目前发布的四个 Spring Boot 2.3 里程碑版本,在核心团队或贡献者中,还没有发现任何重大的构建问题。

    • Spring Boot 关键功能是约定优于配置,将这种方法应用于构建。避免在 build.gradle 文件中包含命令式逻辑,编写了几个可以在项目的中找到的小插件 buildSrc。。

    虽然现有 Gradle 生态系统对 Spring Boot 构建几乎空白,需要从头通过编写很多通用的 gradle 插件来应用到 Spring Boot,但迁移到 Gradle 的提交从代码库中删除了近 9500 行。

    切换结果

    就减少项目构建时间而言,将构建迁移到 Gradle 无疑是成功的。如上所述,在 CI 和开发人员机器上,基于 Maven 的完整构建都需要一个小时或更长时间。而基于 Gradle 的平均成功构建时间为 9 分 22 秒,如以下截图所示:

    如果对构建性能的更多细节感兴趣,可以在 Spring Boot 的公共Gradle Enterprise实例上获得更多数据。

    除了提高性能外,对其他功能进行探索。例如,一段时间以来,进行许多不稳定的测试。由于这些原因,构建失败的次数比预期要多,可以在 Tests 仪表板中看到这一点。使用 Gradle 分片测试来替代 CI 的通用测试方案,并帮组我们了解是否已成功解决问题。

    结论

    CI 构建现在平均大约需要 20 分钟,比以前快 3-4 倍。
    本地构建平均需要 2 分钟 30 秒,比以前快 20-30 倍。

    https://spring.io/blog/2020/06/08/migrating-spring-boot-s-build-to-gradle

    https://gitee.com/sxfad/gradle-scripts image

    展开全文
  • 最近在学习maven+SpringBoot,然后准备自己搭建个项目来看,创建过程中很鸡冻,然后运行崩溃了,各种报错。。。 因此记录下这些坑。。。。 创建Maven Web项目 按照提示一步步走,这里选择webapp 继续next ...
  • SpringBoot是一个特别方便的框架,他可以把我们平时使用的常规ssm框架快速集成完毕,在SpringBoot框架中,我们不用配置application.xml(Spring配置文件),springMVC.xml(SpringMVC配置文件),SpringBoot只有一个...
  • idel maven创建springboot

    2020-07-18 11:20:52
    最近在从新学习spring的注解,打算用IDEA创建一个springboot的简单项目,下面来记录一下创建过程 1.创建过程百度了一下,有两种方式,第一种是maven创建,第二种是spring Initializr 先说第二种方式,因为我的网络...
  •  最近在项目中使用IDEA导入了一个SpringBoot工程,通过maven的方式下载jar包,发现jar包死活下载不下来,进到maven本地仓库jar包的版本文件中发现里面只有一个”.lastUpdated”文件,文件里面有报错信息“PKIX path...
  • 选择SDK主要是懒。 首先在项目中添加jar包引用,Idea开发的话就是File - project Structure 然后 从module和 ...提交代码 当shell脚本执行到 mvn clean package --settings=/data/maven/apache-maven-3.0.5/conf/set...
  • 所以只能放弃,用Dockerfile试试。但是Dkerfile也是很麻烦。在From centos 7的前提下,还要RUN wget ..下载安装jdk什么的,还要ENV配置环境变量。所以就换另外一种方法 由于我们需要maven,所以我们先在我们的服务器...
  • springboot 使用maven拉取依赖 .lastUpdated

    千次阅读 2020-04-27 10:19:29
    年后做项目遇到这个超级坑的问题,springboot 项目拉取依赖全是..lastUpdated结尾。setting中的镜像换了几次都不行,最后先用人家的私有云来用了下但是速度太慢了。今天在网上找了很久来解决这个问题。 使用...
  • 又出于这几天刚好对maven项目的搭建有些好奇就查阅了些资料,在同学的支持下鼓起勇气写下人生的第一篇博客,内心那个激动哈哈哈,废话不多说进入正题,教你如何在maven项目搭建环境成springboot项目。 工具:...
  • 1、报程序包不存在:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project dao: Compilation failure: Compilation failure: 原因:多模块项目仅仅...
  • 基于MavenSpringboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建 11 October 2016 12:21:19 pm 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Spring MVC+Mybatis),但是...
  •  本文最核心的部分就是自动重启应用了,原本网上有方法说使用Deoloy to container插件可以自动针对tomcat进行发包和启动,但是本人配置后发现没有效果,弄了半天最终放弃这一方式了。之后经过不断尝试研究,最终...
  • SpringBoot-iText-Pdf

    2021-09-12 12:03:43
    title: SpringBoot-iText-Pdf author: 胡安民 toc: true top: false cover: false categories: java reprintPolicy: cc_by keywords: ‘导出PDF ,Springboot导出PDF,word转PDF,html转PDF,web下载PDF’ tags: java ...
  • 问题1:笔者在启动一个多模块的maven项目时,每个模块都是一个maven项目,通过pom文件设置依赖关系,本次要讨论的问题为通过模块module1里面写的一个controller方法返回module2里面的一个jsp页面,在idea里面设置...
  • 并且在 spring5 (springboot 2.x) 后,spring 官方放弃了 Guava,而使用了性能更优秀的 Caffeine 作为默认缓存组件。 1、Caffeine 性能 可以通过下图观测到,在下面缓存组件中 Caffeine 性能是其中最好的。 2、...
  • 导入所需的依赖 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=... xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org
  • 项目是用springboot 然后一看是maven管理的。。所以Intellij idea 直接open 随着各种download结束 。 启动发现 如下问题 。。  Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter
  • Maven从入门到放弃

    千次阅读 多人点赞 2019-08-05 10:33:26
    1.maven是什么? maven是Apache下的一个纯java开发的一个开源项目,它是一款能够抽象构建过程,并且提供依赖管理,中央仓库,自动下载构建等功能的项目构建工具。 2.为什么要使用maven工具构建项目? 假如我们在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,569
精华内容 1,027
关键字:

mavenspringboot放弃

spring 订阅