请求提供Maven配置:生成仅含Netflix DGS生成类的独立JAR
解决方案
要生成仅包含Netflix DGS Schema生成类的独立JAR,你可以通过配置Maven的jar插件创建分类器JAR,同时确保生成的源码被正确纳入编译流程。以下是完整的Maven配置:
1. 识别DGS生成类的目录
首先用build-helper-maven-plugin将DGS默认的生成源码目录(target/generated-sources/graphql-java)添加到编译源路径,确保Maven能识别这些生成类:
<build> <plugins> <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/graphql-java</source> </sources> </configuration> </execution> </executions> </plugin>
2. 生成仅含生成类的分类器JAR
配置maven-jar-plugin创建带分类器(如graphql-types)的JAR,只打包DGS生成的类,排除项目自身的业务代码:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>graphql-types-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <!-- 分类器,用于区分主JAR和生成类JAR --> <classifier>graphql-types</classifier> <!-- 仅包含DGS生成类的路径(根据实际包结构调整) --> <includes> <include>com/yourcompany/**/graphql/types/**</include> <!-- 生成类在其他路径的话,补充对应规则 --> </includes> <!-- 排除项目自身的业务代码 --> <excludes> <exclude>com/yourcompany/**/service/**</exclude> <exclude>com/yourcompany/**/controller/**</exclude> <!-- 根据项目结构添加需要排除的包 --> </excludes> </configuration> </execution> </executions> </plugin>
3. 可选:发布分类器JAR到仓库
如果要将这个生成类JAR发布到Maven仓库供其他服务使用,添加以下配置:
<!-- 安装到本地仓库 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>install-graphql-types-jar</id> <phase>install</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>${project.build.directory}/${project.artifactId}-${project.version}-graphql-types.jar</file> <groupId>${project.groupId}</groupId> <artifactId>${project.artifactId}</artifactId> <version>${project.version}</version> <classifier>graphql-types</classifier> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin> <!-- 部署到远程仓库 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>deploy-graphql-types-jar</id> <phase>deploy</phase> <goals> <goal>deploy-file</goal> </goals> <configuration> <file>${project.build.directory}/${project.artifactId}-${project.version}-graphql-types.jar</file> <groupId>${project.groupId}</groupId> <artifactId>${project.artifactId}</artifactId> <version>${project.version}</version> <classifier>graphql-types</classifier> <packaging>jar</packaging> <url>${project.distributionManagement.repository.url}</url> <repositoryId>${project.distributionManagement.repository.id}</repositoryId> </configuration> </execution> </executions> </plugin> </plugins> </build>
4. 其他服务依赖该JAR的方式
其他服务需要使用这个生成类JAR时,在pom.xml中添加如下依赖:
<dependency> <groupId>com.yourcompany</groupId> <artifactId>your-project-artifact-id</artifactId> <version>your-project-version</version> <classifier>graphql-types</classifier> </dependency>
关键注意事项
- 务必调整
<includes>和<excludes>中的包路径,匹配你的DGS生成类实际所在的包结构。 - 确保DGS插件已正确配置,能在
generate-sources阶段将类生成到指定目录。 - 避免使用shade/assembly插件,这类插件会合并依赖或打包所有内容,易引发类路径冲突或“包不存在”问题,分类器JAR的方式更轻量精准。
内容的提问来源于stack exchange,提问作者Rashad Naghiyev
相关产品推荐
相关产品推荐

