如何通过Maven的protoc-jar-maven-plugin将protobuf生成的Java类打包为jar
解决方案
方案1:使用插件自带的输出jar功能
你可以直接在protoc-jar-maven-plugin的<configuration>块中添加<outputJar>参数,指定生成jar的输出路径即可,插件会在生成Java类后自动将其编译打包为jar文件。
修改后的配置如下:
<plugin> <groupId>com.github.os72</groupId> <artifactId>protoc-jar-maven-plugin</artifactId> <version>${version.os72}</version> <executions> <execution> <id>protoc.main</id> <phase>generate-sources</phase> <goals> <goal>run</goal> </goals> <configuration> <protocVersion>${version.protobuf}</protocVersion> <addSources>main</addSources> <inputDirectories> <include>src/main/resources/protobuf</include> </inputDirectories> <!-- 新增这一行,指定jar输出路径,可自定义路径和文件名 --> <outputJar>target/protobuf-generated-classes.jar</outputJar> </configuration> </execution> </executions> </plugin>
执行mvn generate-sources后即可在指定路径拿到生成的jar包。
方案2:和项目主代码一起打进项目jar
你当前配置中的<addSources>main</addSources>已经将生成的Java源码目录自动加入了Maven的主编译路径,正常执行mvn clean package命令时,这些生成的类会和你项目的其他业务代码一起被编译,最终打进项目的主jar包中。
如果没有正常打入,检查你项目中maven-jar-plugin等打包插件是否配置了排除规则,排除了generated-sources目录下的编译产物。
方案3:单独打包已生成的类
如果你已经成功生成了Java类到target/generated-sources目录,也可以额外配置maven-jar-plugin单独打包该目录的编译产物,配置示例如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>pack-proto-classes</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <classifier>proto</classifier> <classesDirectory>target/generated-sources</classesDirectory> <finalName>protobuf-generated</finalName> </configuration> </execution> </executions> </plugin>
执行mvn package后会在target目录生成名为protobuf-generated-proto.jar的归档文件。
内容的提问来源于stack exchange,提问作者Daniel Pop
相关产品推荐
相关产品推荐

