iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >screw Maven插件方式运行时在编译打包时跳过执行的问题如何解决
  • 431
分享到

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

2023-07-05 15:07:32 431人浏览 泡泡鱼
摘要

今天小编给大家分享一下screw Maven插件方式运行时在编译打包时跳过执行的问题如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下

今天小编给大家分享一下screw Maven插件方式运行时在编译打包时跳过执行的问题如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

解决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=<masked>}
[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........................<masked>
[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 failure

The 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 failure

The 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.<init> (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.<init> (HikariPool.java:115)
    at com.zaxxer.hikari.HikariDataSource.<init> (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 即可。

修改前:

      <plugin>        <groupId>cn.smallbun.screw</groupId>        <artifactId>screw-maven-plugin</artifactId>        <version>1.0.5</version>        <dependencies>          <!-- HikariCP -->          <dependency>            <groupId>com.zaxxer</groupId>            <artifactId>HikariCP</artifactId>            <version>3.4.5</version>          </dependency>          <!--mysql driver-->          <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>8.0.20</version>          </dependency>        </dependencies>        <configuration>          ... 省略        </configuration>        <executions>          <execution>            <phase>compile</phase>            <goals>              <goal>run</goal>            </goals>          </execution>        </executions>      </plugin>

修改后:

...      <plugin>        <groupId>cn.smallbun.screw</groupId>        <artifactId>screw-maven-plugin</artifactId>        <version>1.0.5</version>        <dependencies>          <!-- HikariCP -->          <dependency>            <groupId>com.zaxxer</groupId>            <artifactId>HikariCP</artifactId>            <version>3.4.5</version>          </dependency>          <!--mysql driver-->          <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>8.0.20</version>          </dependency>        </dependencies>        <configuration>          ... 省略        </configuration>        <executions>          <execution>            <phase>${mvn.screw.skip}</phase>            <goals>              <goal>run</goal>            </goals>          </execution>        </executions>      </plugin>

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

以上就是“screw Maven插件方式运行时在编译打包时跳过执行的问题如何解决”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: screw Maven插件方式运行时在编译打包时跳过执行的问题如何解决

本文链接: https://www.lsjlt.com/news/352539.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作