有没有办法将 bean 注册到 Maven 子模块中?

Is there any way to register a bean into a maven submodule?

我在一个项目中工作,该项目的目标是使用 quarkus 构建一个 maven 多模块。 RestEasy 提供了一个接口 ExceptionMapper 来拦截每一个抛出的 type 异常。我的 impl 包含在打包在 jar 文件中的 Maven 子模块中。 jar 文件在主项目中导入,但 bean 未在 CDI 上下文中注册

我试图强制注册 bean,但没有用,我找到的唯一解决方案是在主项目中这样做,但我认为这并不好

@Provider
public class FlowItemExceptionErrorHandler extends FlowItemExceptionErrorMapper {

我的父项目 pom 结构。


  <groupId>com.dummyproject</groupId>
    <artifactId>inter-quarkus-framework-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <surefire-plugin.version>2.22.0</surefire-plugin.version>
        <quarkus.version>0.19.1</quarkus.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.context.version>4.3.7.RELEASE</spring.context.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-bom</artifactId>
                <version>${quarkus.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.dummyproject</groupId>
                <artifactId>inter-workflow-module</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
            <dependency>
                <groupId>com.dummyproject</groupId>
                <artifactId>inter-logging-module</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
            <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-resteasy</artifactId>
            </dependency>
            <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-arc</artifactId>
            </dependency>
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>rest-assured</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-junit5</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.context.version}</version>
            </dependency>
            <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-spring-di</artifactId>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.context.version}</version>
        </dependency>

        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-spring-di</artifactId>
            <version>${quarkus.version}</version>
        </dependency>

        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy</artifactId>
            <version>${quarkus.version}</version>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-arc</artifactId>
            <version>${quarkus.version}</version>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${surefire-plugin.version}</version>
                    <configuration>
                        <systemProperties>
                            <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                        </systemProperties>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>io.quarkus</groupId>
                    <artifactId>quarkus-maven-plugin</artifactId>
                    <version>${quarkus.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <profiles>
        <profile>
            <id>native</id>
            <activation>
                <property>
                    <name>native</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.quarkus</groupId>
                        <artifactId>quarkus-maven-plugin</artifactId>
                        <version>${quarkus.version}</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>native-image</goal>
                                </goals>
                                <configuration>
                                    <enableHttpUrlHandler>true</enableHttpUrlHandler>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <version>${surefire-plugin.version}</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>integration-test</goal>
                                    <goal>verify</goal>
                                </goals>
                                <configuration>
                                    <systemProperties>
                                        <native.image.path>
                                            ${project.build.directory}/${project.build.finalName}-runner
                                        </native.image.path>
                                    </systemProperties>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <modules>
        <module>inter-workflow-module</module>
        <module>inter-logging-module</module>
    </modules>

我的日志模块pom结构

<parent>
        <groupId>com.dummyproject</groupId>
        <artifactId>inter-quarkus-framework-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>inter-logging-module</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.dummyproject</groupId>
            <artifactId>inter-workflow-module</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

日志记录模块中的我的 ExceptionMapper 实现


@Provider
public class FlowItemExceptionErrorMapper implements ExceptionMapper<FlowItemException> {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public Response toResponse(FlowItemException exception) {

        InterExceptionMetadata exceptionMetadata = exception.getClass().getAnnotation(InterExceptionMetadata.class);

        String message = null;
        int statusCode = 500;


        if (exceptionMetadata != null) {

            message = exception.getMessage();
            statusCode = exceptionMetadata.httpStatus();

            if (exceptionMetadata.defaultMessageTemplate()) {

                message = "Sistema indisponível no momento";

            }

            switch (exceptionMetadata.logLevel()) {
                case OFF:
                    break;
                case WARN:
                    logger.warn(message, exception);
                    break;
                case INFO:
                    logger.info(message, exception);
                    break;
                case DEBUG:
                    logger.debug(message, exception);
                    break;
                case TRACE:
                    logger.trace(message, exception);
                    break;
                default:
                    logger.error(message, exception);
                    break;
            }

        }

        return Response.status(statusCode).entity(message).build();

    }

}

上面的bean没有在主项目中注册

Quarkus 不会自动扫描额外的 jar。默认情况下,它只考虑应用程序 类.

因此,如果您需要其他依赖项(外部依赖项或多模块项目中的依赖项),则必须将它们包含在 Jandex 索引中。

我在这里给出了全面的回答: .