多模块Maven项目集成Web3J插件生成Sol包装类编译失败求助
解决Web3J Maven插件生成的Java类无法被Maven编译识别的问题
问题原因
Web3J插件生成的Java类目录未被Maven纳入源码根目录列表,导致compile阶段无法找到对应包。Maven默认仅编译src/main/java、src/test/java等标准目录,自定义生成目录需手动配置。
解决方案
在子模块的pom.xml中添加build-helper-maven-plugin,将Web3J生成的目录注册为Maven源码目录,同时确保Web3J插件在generate-sources阶段执行(保证编译前生成代码)。
修改后的子模块pom.xml配置
<build> <plugins> <!-- 1. 添加build-helper插件,注册生成的源码目录 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>${project.build.directory}/generated-sources/web3j/java</source> </sources> </configuration> </execution> </executions> </plugin> <!-- 2. 调整Web3J插件,明确执行阶段 --> <plugin> <groupId>org.web3j</groupId> <artifactId>web3j-maven-plugin</artifactId> <version>4.9.4</version> <executions> <execution> <phase>generate-sources</phase> <!-- 明确在compile前的阶段执行,确保代码生成时机正确 --> <goals> <goal>generate-sources</goal> </goals> </execution> </executions> <configuration> <soliditySourceFiles> <directory>${project.basedir}/src/main/resources/solidity</directory> <includes> <include>**/*.sol</include> </includes> </soliditySourceFiles> <packageName>org.example.project-name.wrappers</packageName> <outputDirectory> <java>${project.build.directory}/generated-sources/web3j/java</java> </outputDirectory> </configuration> </plugin> </plugins> </build>
验证步骤
执行以下命令重新构建项目:
mvn clean -U install
补充说明
build-helper-maven-plugin的作用是扩展Maven的源码目录范围,让compile阶段能识别到Web3J生成的代码。- 明确Web3J插件的执行阶段是为了避免出现"代码未生成就开始编译"的时序问题。
- 修改配置后无需手动分步执行命令,Maven会自动按生命周期顺序完成代码生成、编译等步骤。
内容的提问来源于stack exchange,提问作者András Ballai
相关产品推荐
相关产品推荐

