Jakarta ee 发生EAR时MyBatis CDI类装入器问题

Jakarta ee 发生EAR时MyBatis CDI类装入器问题,jakarta-ee,cdi,mybatis,ear,ibatis,Jakarta Ee,Cdi,Mybatis,Ear,Ibatis,我有一只耳朵,目前只听一场战争。我的问题是,如果mybatis-..jar文件位于web module.war\web-INF\lib下,那么一切都正常。但是,如果我与maven创建了一场骨瘦如柴的战争,并且两个与mybatis相关的JAR位于EAR/lib下,我会得到一个警告:没有正确配置SqlSessionFactory生产者。错误 我认为这是一个与类路径相关的问题 我计划在我的耳朵里加入更多的战争,我希望避免在每次战争中使用这两个罐子 环境:Java8,Payara服务器4.1.2.172

我有一只耳朵,目前只听一场战争。我的问题是,如果mybatis-..jar文件位于web module.war\web-INF\lib下,那么一切都正常。但是,如果我与maven创建了一场骨瘦如柴的战争,并且两个与mybatis相关的JAR位于EAR/lib下,我会得到一个警告:没有正确配置SqlSessionFactory生产者。错误

我认为这是一个与类路径相关的问题

我计划在我的耳朵里加入更多的战争,我希望避免在每次战争中使用这两个罐子

环境:Java8,Payara服务器4.1.2.172

这是我耳朵的结构,但不起作用

web模块包含一个带有注入EJB的servlet。此EJB使用myBatis映射器

Servlet

EJB

我尝试使用以下内容将MANIFEST.MF文件添加到ear\web module.war\META-INF目录,但没有帮助:

Class-Path: lib/mybatis-3.4.4.jar lib/mybatis-cdi-1.0.0.jar
<glassfish-web-app>
    <class-loader delegate="true" extra-class-path="../lib/mybatis-3.4.4.jar:../lib/mybatis-cdi-1.0.0.jar"/>
</glassfish-web-app>
我还尝试将glassfish-web.xml文件添加到ear\web module.war\web-INF目录,如前所述,但没有帮助:

Class-Path: lib/mybatis-3.4.4.jar lib/mybatis-cdi-1.0.0.jar
<glassfish-web-app>
    <class-loader delegate="true" extra-class-path="../lib/mybatis-3.4.4.jar:../lib/mybatis-cdi-1.0.0.jar"/>
</glassfish-web-app>

知道如何解决这个类路径问题吗?

我不清楚这是否是我们最终得出这个结论的原因,但是:让您的EAR组件在EAR归档中解压用于WAR和EJB的简单文件夹可能会有所帮助

以下是Maven的配置:

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <configuration>
        <applicationName>myApp</applicationName>
        <version>6</version>
        <filtering>true</filtering>
        <initializeInOrder>true</initializeInOrder>
        <defaultLibBundleDir>APP-INF/lib</defaultLibBundleDir>
        <unpackTypes>war,ejb</unpackTypes>
        <modules>
            <ejbModule>
                <groupId>com.example</groupId>
                <artifactId>myapp-ejb</artifactId>
                <bundleFileName>myapp-ejb.jar</bundleFileName>
            </ejbModule>
            <webModule>
                <groupId>com.example</groupId>
                <artifactId>myapp-rest</artifactId>
                <contextRoot>/myapp</contextRoot>
                <bundleFileName>myapp.war</bundleFileName>
            </webModule>
        </modules>
    </configuration>
</plugin>
这就是解决方案:

全文如下: 全文如下: src: src:
Class-Path: lib/mybatis-3.4.4.jar lib/mybatis-cdi-1.0.0.jar
<glassfish-web-app>
    <class-loader delegate="true" extra-class-path="../lib/mybatis-3.4.4.jar:../lib/mybatis-cdi-1.0.0.jar"/>
</glassfish-web-app>
<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <configuration>
        <applicationName>myApp</applicationName>
        <version>6</version>
        <filtering>true</filtering>
        <initializeInOrder>true</initializeInOrder>
        <defaultLibBundleDir>APP-INF/lib</defaultLibBundleDir>
        <unpackTypes>war,ejb</unpackTypes>
        <modules>
            <ejbModule>
                <groupId>com.example</groupId>
                <artifactId>myapp-ejb</artifactId>
                <bundleFileName>myapp-ejb.jar</bundleFileName>
            </ejbModule>
            <webModule>
                <groupId>com.example</groupId>
                <artifactId>myapp-rest</artifactId>
                <contextRoot>/myapp</contextRoot>
                <bundleFileName>myapp.war</bundleFileName>
            </webModule>
        </modules>
    </configuration>
</plugin>