解决screw Maven插件方式运行时,在编译打包时跳过执行的问题
创始人
2025-05-31 14:48:07
0

文章目录

  • 解决screw Maven插件方式运行时,在编译打包时跳过执行的问题
    • 问题描述
    • 调研
    • 解决方案
      • 方案1
      • 方案2

解决screw Maven插件方式运行时,在编译打包时跳过执行的问题

问题描述

在引入screw 进行数据库文档生成,并且使用Maven插件方式运行时,在执行项目打包时,会自动运行该插件。导致在不需要重新生成数据库文档时,也会去生成数据库文档。并且通常数据库文档生成是基于开发环境的数据库的,对于非开发环境的自动打包处理环境,往往是无法访问开发环境数据库,这也会导致项目的打包出错的问题。出错信息如下:

不带-X参数的出错信息:

[INFO] --- screw-maven-plugin:1.0.5:run (default) @ java-abc-cids-interfaces ---
[INFO] Database design document generation begins 🚀
[INFO] screw - Starting...
Build step 'Invoke top-level Maven targets' marked build as failure

-X参数的出错信息:

[INFO] Database design document generation begins 🚀
[DEBUG] Driver class com.mysql.cj.jdbc.Driver found in Thread context class loader ClassRealm[plugin>cn.smallbun.screw:screw-maven-plugin:1.0.5, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@ba8a1dc]
[DEBUG] screw - configuration:
[DEBUG] allowPoolSuspension.............false
[DEBUG] autoCommit......................true
[DEBUG] catalog.........................none
[DEBUG] connectionInitSql...............none
[DEBUG] connectionTestQuery.............none
[DEBUG] connectionTimeout...............30000
[DEBUG] dataSource......................none
[DEBUG] dataSourceClassName.............none
[DEBUG] dataSourceJNDI..................none
[DEBUG] dataSourceProperties............{useInformationSchema=true, password=}
[DEBUG] driverClassName................."com.mysql.cj.jdbc.Driver"
[DEBUG] exceptionOverrideClassName......none
[DEBUG] healthCheckProperties...........{}
[DEBUG] healthCheckRegistry.............none
[DEBUG] idleTimeout.....................600000
[DEBUG] initializationFailTimeout.......1
[DEBUG] isolateInternalQueries..........false
[DEBUG] jdbcUrl.........................jdbc:mysql://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[DEBUG] leakDetectionThreshold..........0
[DEBUG] maxLifetime.....................1800000
[DEBUG] maximumPoolSize.................10
[DEBUG] metricRegistry..................none
[DEBUG] metricsTrackerFactory...........none
[DEBUG] minimumIdle.....................10
[DEBUG] password........................
[DEBUG] poolName........................"screw"
[DEBUG] readOnly........................false
[DEBUG] registerMbeans..................false
[DEBUG] scheduledExecutor...............none
[DEBUG] schema..........................none
[DEBUG] threadFactory...................internal
[DEBUG] transactionIsolation............default
[DEBUG] username........................"xxxxx"
[DEBUG] validationTimeout...............5000
[INFO] screw - Starting...
[DEBUG] screw - Failed to create/setup connection: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
[DEBUG] screw - Cannot acquire connection from data source
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException (SQLError.java:174)at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException (SQLExceptionsMapping.java:64)at com.mysql.cj.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:836)at com.mysql.cj.jdbc.ConnectionImpl. (ConnectionImpl.java:456)at com.mysql.cj.jdbc.ConnectionImpl.getInstance (ConnectionImpl.java:246)at com.mysql.cj.jdbc.NonRegisteringDriver.connect (NonRegisteringDriver.java:197)at com.zaxxer.hikari.util.DriverDataSource.getConnection (DriverDataSource.java:138)at com.zaxxer.hikari.pool.PoolBase.newConnection (PoolBase.java:358)at com.zaxxer.hikari.pool.PoolBase.newPoolEntry (PoolBase.java:206)at com.zaxxer.hikari.pool.HikariPool.createPoolEntry (HikariPool.java:477)at com.zaxxer.hikari.pool.HikariPool.checkFailFast (HikariPool.java:560)at com.zaxxer.hikari.pool.HikariPool. (HikariPool.java:115)at com.zaxxer.hikari.HikariDataSource. (HikariDataSource.java:81)at cn.smallbun.screw.maven.plugin.mojo.RunDocMojo.getDataSource (RunDocMojo.java:274)at cn.smallbun.screw.maven.plugin.mojo.RunDocMojo.execute (RunDocMojo.java:197)at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)...[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:10 min
[INFO] Finished at: 2023-03-20T13:23:57+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal cn.smallbun.screw:screw-maven-plugin:1.0.5:run (default) on project java-abc-cids-interfaces: Execution default of goal cn.smallbun.screw:screw-maven-plugin:1.0.5:run failed: Failed to initialize pool: Communications link failure
[ERROR] 
[ERROR] The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.: connect timed out
[ERROR] -> [Help 1] 

调研

通常的对于Maven插件跳过使用,我们只需要找插件的对应的skip 参数,然后在打包时通过-D 参数来修改这个参数即可,但通过阅读这个插件的源码,并且开启Maven的-X 参数执行,都没有在这个插件中找到skip 参数。

插件启动执行代码位置:https://gitcode.net/mirrors/pingfangushi/screw/-/blob/master/screw-maven-plugin/src/main/java/cn/smallbun/screw/maven/plugin/mojo/RunDocMojo.java

通过查看代码得知,插件的默认触发执行的PhaseCOMPILE,因此解决的思路就有了。

解决方案

方案1

注释掉插件引入代码,在开发环境需要手动执行的时候,再放开注释。

方案2

不再写死配置的Phase ,而是指定一个变量,由运行Maven命令时,通过参数-D 传入正确的Phase ,而不需要执行的时候,传入一个不存在的Phase 或者干脆不传入Phase 即可。

修改前:

      cn.smallbun.screwscrew-maven-plugin1.0.5com.zaxxerHikariCP3.4.5mysqlmysql-connector-java8.0.20... 省略compilerun

修改后:

...cn.smallbun.screwscrew-maven-plugin1.0.5com.zaxxerHikariCP3.4.5mysqlmysql-connector-java8.0.20... 省略${mvn.screw.skip}run

Maven 运行的方法:

  • 不需要运行

clean package -Dmvn.screw.skip=none -f pom.xml 或者 clean package -f pom.xml

  • 需要运行

clean package -Dmvn.screw.skip=compile -f pom.xml

  • 单独运行:

screw:run -f pom.xml

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...