maven-war-plugin执行时意外触发jooq-codegen-maven运行的问题
解决Maven打包时jooq-codegen-maven自动触发的问题
看起来你遇到的核心问题是jooq-codegen-maven默认绑定了Maven生命周期的早期阶段(比如generate-sources),而maven-war-plugin的package目标会触发完整的生命周期流程,导致代码生成在打包前自动执行,引发意外的类更新和难以排查的异常。之前直接加跳过配置又彻底禁用了插件,这显然不是你想要的结果。
下面给你两种可靠的解决方案,帮你解耦代码生成和打包流程:
方案一:让jooq-codegen-maven仅手动触发执行
修改jooq插件的配置,让它不绑定到默认生命周期阶段,同时默认跳过,只有你主动指定时才运行:
<plugin> <groupId>org.jooq</groupId> <artifactId>jooq-codegen-maven</artifactId> <version>你的jooq版本号</version> <executions> <execution> <id>generate-jooq-classes</id> <!-- 不绑定到任何生命周期阶段,避免自动触发 --> <phase>none</phase> <goals> <goal>generate</goal> </goals> <configuration> <!-- 你的jooq代码生成核心配置 --> <jdbc> <url>jdbc:mysql://localhost:3306/your_db</url> <user>db_user</user> <password>db_password</password> </jdbc> <generator> <database> <name>org.jooq.meta.mysql.MySQLDatabase</name> <includes>.*</includes> <excludes></excludes> <inputSchema>your_db</inputSchema> </database> <target> <packageName>com.yourpackage.jooq</packageName> <directory>src/main/java</directory> </target> </generator> </configuration> </execution> </executions> <!-- 默认跳过插件执行 --> <configuration> <skip>true</skip> </configuration> </plugin>
使用方式:
- 日常打包war包:直接执行
mvn package,此时jooq插件会被跳过,不会生成新的数据库类 - 需要更新数据库类时:执行
mvn jooq-codegen:generate -Djooq.codegen.skip=false,手动触发代码生成
方案二:用Maven Profile隔离jooq代码生成
把jooq插件的配置放到一个单独的Profile中,默认不激活,只有需要生成代码时才启用这个Profile:
<!-- 在pom.xml的profiles节点下添加 --> <profiles> <profile> <id>generate-jooq-code</id> <build> <plugins> <plugin> <groupId>org.jooq</groupId> <artifactId>jooq-codegen-maven</artifactId> <version>你的jooq版本号</version> <executions> <execution> <id>generate-jooq-classes</id> <phase>generate-sources</phase> <goals> <goal>generate</goal> </goals> <configuration> <!-- 你的jooq代码生成核心配置 --> <jdbc> <url>jdbc:mysql://localhost:3306/your_db</url> <user>db_user</user> <password>db_password</password> </jdbc> <generator> <database> <name>org.jooq.meta.mysql.MySQLDatabase</name> <includes>.*</includes> <inputSchema>your_db</inputSchema> </database> <target> <packageName>com.yourpackage.jooq</packageName> <directory>src/main/java</directory> </target> </generator> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles>
使用方式:
- 日常打包war包:执行
mvn package,Profile默认不激活,jooq插件不会运行 - 需要生成/更新数据库类时:执行
mvn generate-sources -Pgenerate-jooq-code,或者如果要同时打包+生成代码,执行mvn package -Pgenerate-jooq-code
这两种方案都能完美解决你遇到的问题:既不会在打包时意外触发代码生成,又能在需要的时候轻松运行jooq的代码生成功能。
内容的提问来源于stack exchange,提问作者Rico
相关产品推荐
相关产品推荐

