Java Can';t将*.war部署到Glassfish 4

Java Can';t将*.war部署到Glassfish 4,java,jakarta-ee,dependency-injection,ejb,Java,Jakarta Ee,Dependency Injection,Ejb,我有一个Bean接口,AbstractBean(实现Bean)和SpecificBean(扩展AbstractBean)。我想通过以下代码片段注入SpecificBean: @Stateless @Specific public class SpecificBean extends AbstractBean {..} @Path("resource") public class Service { @Inject @Specific private Bean bean;

我有一个Bean接口,AbstractBean(实现Bean)和SpecificBean(扩展AbstractBean)。我想通过以下代码片段注入SpecificBean:

@Stateless
@Specific
public class SpecificBean extends AbstractBean {..}

@Path("resource")
public class Service {
    @Inject
    @Specific
    private Bean bean;
}

当我尝试将其部署到glassfish时,我看到了下一个错误:

部署期间发生错误:加载应用程序时出现异常:CDI部署失败:WELD-001408在[BackedAnnotatedConstructor]的注入点[[BackedAnnotatedParameter]参数2处具有限定符[@Default]的类型[IterableProvider>]的未满足依赖项@Inject org.glassfish.jersey.internal.Inject.JerseyClassAnalyzer(@Named ClassAnalyzer,IterableProvider>)]


如果删除所有注释(预期为@Path),应用程序部署时不会出现任何错误。

从maven pom.xml中的依赖项列表中删除了jersey(jersey已经包含在glassfish 4中),现在部署正常。

我发现这个问题与类似,只想添加我的“2美分”。在我的例子中,我将Jersey 2.0与Jackson一起使用,以便从rest接口将JSON转换为对象,并将对象转换为JSON。这意味着我必须在
ResourceConfig
上注册
JacksonFeature
,如下所示:

import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.message.GZipEncoder;
import org.glassfish.jersey.server.ResourceConfig;

public class JacksonRestConfiguration extends ResourceConfig {

public JacksonRestConfiguration() {
    register( new GZipEncoder() );
    register( JacksonFeature.class );
}
我还在我的应用程序扩展上禁用了Moxy:

import org.glassfish.jersey.CommonProperties;

@ApplicationPath("services")
public class RestApplication extends Application implements Feature {

    public boolean configure( final FeatureContext context ) {
        String postfix = '.' + context.getConfiguration().getRuntimeType().name().toLowerCase();
        context.property( CommonProperties.MOXY_JSON_FEATURE_DISABLE + postfix, true );    
        return true;
    }
}
上述两个类都要求我在我的
pom.xml
中保留jersey作为
提供的
,以便正确生成war文件:

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.13</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.13</version>
        <scope>provided</scope>
    </dependency>

org.glassfish.jersey.media
泽西媒体公司
2.13
假如
org.glassfish.jersey.core
泽西服务器
2.13
假如

以下是帮助我解决此问题的一些步骤:

  • 打开命令窗口(最好以管理员身份)。 单击开始->键入cmd 然后按回车键

  • 转到安装GlassFish的路径,例如: C:\AppServers\glassfish5\glassfish\bin

    运行以下命令:

    asadmin start-domain  
    asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false
    
  • 重新启动GlassFish并尝试部署您的应用程序

  • 感谢Stuart Mcculloch对本论坛的支持:

    发生异常:部署过程中发生错误:加载应用程序时发生异常:CDI部署失败:WELD-001408:带限定符的类型注入器的未满足依赖项@默认值

    解决在GlassFish中部署de aplicacion的问题

    如果您使用CDI,它应该可以正常工作。如果不是,则将
    @Inject
    替换为
    @EJB(“”
    ),其中
    是特定bean实现的名称。当我尝试将其部署到glassfish时,我看到下一个错误:部署期间发生错误:加载应用程序时异常:CDI部署失败:WELD-001408[Ref]类型的未满足依赖项在[BackedAnnotatedConstructor]@Injector org.glassfish.jersey.server.internal.routing.UriRoutingContext(Ref,ProcessingProviders)]的注入点[[BackedAnnotatedParameter]参数1处使用限定符[@Default]。@LuiggiMendoza是,我使用CDI,但是在glassfish 4上部署war时会收到上述错误。请编辑您的问题并发布整个错误消息。
    @Specific
    实际上是
    限定符吗?从错误日志中,您可以看到只有
    @Default
    限定符应用于注入点。除了没有Maven之外,我也遇到了完全相同的问题,但听起来将范围更改为“提供”等同于在编译时包含JAR,而不是在部署时。通过我的工具(Ant)为我修复了它。谢谢你的2美分!