我正在创建插件(提供商)使用服务提供商接口的keyCloak。我已经能够建立一对夫妇。现在,我需要添加Smallrye-Graphql客户端库来查询Graphql服务器。但是,部署插件时,在类路径中找不到库。
我成功地为它创建了一个类和集成测试。然而,当我将插件部署到KeyClope时,我发现了以下错误:
16:38:38,127 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-1)
Uncaught server error: java.util.ServiceConfigurationError: no
io.smallrye.graphql.client.typesafe.api.GraphQlClientBuilder in classpath
我已经将gradle配置为包含导致问题的依赖项,并将其添加到类路径中。我想我应该在jboss部署结构中添加一个条目。xml,但我不知道应该在那里写什么。
gradle配置
plugins {
id 'war'
id 'java-library'
id 'maven-publish'
}
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
configurations {
dependenciesToInclude
}
dependencies {
dependenciesToInclude "io.smallrye:smallrye-graphql-client:1.0.20"
providedCompile group: 'javax.enterprise', name: 'cdi-api', version: '2.0'
providedCompile "org.keycloak:keycloak-server-spi:${keycloakVersion}"
providedCompile "org.keycloak:keycloak-server-spi-private:${keycloakVersion}"
providedCompile("org.keycloak:keycloak-services:${keycloakVersion}") {
exclude group: 'org.slf4j', module: 'slf4j-api'
exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
providedCompile group: 'org.keycloak', name: 'keycloak-model-api', version: '1.8.1.Final'
providedCompile "org.jboss.resteasy:resteasy-jaxrs"
providedCompile group: 'org.eclipse.microprofile.graphql', name: 'microprofile-graphql-api', version: '1.0.3'
compile group: 'org.apache.geronimo.config', name: 'geronimo-config-impl', version: '1.2.2'
configurations.compile.extendsFrom(configurations.dependenciesToInclude)
}
jar {
manifest {
attributes(
"Class-Path": configurations.dependenciesToInclude.collect { it.getName() }.join(' '))
}
from {
configurations.dependenciesToInclude.collect { it.isDirectory() ? it : zipTree(it) }
}
}
❯ cat META-INF/MANIFEST.MF ─╯
Manifest-Version: 1.0
Class-Path: smallrye-graphql-client-1.0.20.jar geronimo-config-impl-1.2.
2.jar smallrye-graphql-client-api-1.0.20.jar microprofile-graphql-api-1
.0.3.jar microprofile-config-api-1.3.jar org.osgi.annotation.versioning
-1.0.0.jar
下面是jboss部署结构。xml。在这里,您可以看到我试图包含graphql库(已注释掉)
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.keycloak.keycloak-services"/>
<module name="org.keycloak.keycloak-saml-core-public"/>
<module name="org.apache.commons.codec"/>
<module name="org.apache.commons.lang"/>
<module name="org.jboss.logging"/>
<!-- <module name="io.smallrye.smallrye-graphql-client"/>-->
</dependencies>
</deployment>
</jboss-deployment-structure>
我正在使用KeyCloak 11.0.2(WildFly Core 12.0.3.最终)
我不确定我是否正确理解了将库静态添加到jboss的过程。我会根据我对你问题的理解来回答。你的问题有多种解决方案。
您应该首先了解JBoss如何解析其类和依赖项。我将非常简单地解释。JBoss分为模块和部署。
模块放在JBoss的主文件夹中。模块是在运行时不会更改的库。每个模块都有一个名为module的描述符文件。定义构件、依赖项和模块名称的xml。文件模块。xml基本上类似于jboss部署结构。模块世界中的xml。
部署被放在Deployments文件夹中,可以在JBoss服务器运行时重新部署。如果部署需要依赖于另一个模块/部署,则需要将其包含在给定部署的jboss部署结构中<代码>请注意,模块不能依赖于部署,但它可以反过来工作
你可以在互联网上找到更多的信息,但这是你可以使用的基本信息。
如果你想获得对JBoss中某个模块的依赖,你需要在module中找到它的名字。xml并将其写入jboss部署结构。xml(假设您的库是一个部署)
例如,如果你想依赖jackson-dataformat-cbor-2.10.5。keydepeat模块路径中的jar:
modules/system/layers/keycloak/com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/main/jackson-dataformat-cbor-2.10.5.jar
在同一个文件夹中是一个module.xml内容:
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2019 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<module name="com.fasterxml.jackson.dataformat.jackson-dataformat-cbor" xmlns="urn:jboss:module:1.3">
<resources>
<resource-root path="jackson-dataformat-cbor-2.10.5.jar"/>
</resources>
<dependencies>
<module name="com.fasterxml.jackson.core.jackson-core"/>
<module name="com.fasterxml.jackson.core.jackson-databind"/>
<module name="com.fasterxml.jackson.core.jackson-annotations"/>
</dependencies>
</module>
这意味着模块的名称是com。fasterxml。杰克逊。数据格式。jackson dataformat cbor
,这就是您在jboss部署结构中的内容。xml作为一种依赖关系。
在你的例子中,你需要一个JBoss模块中没有包含的对的依赖。这意味着你必须把它加在那里。通过在层中创建一个文件夹来创建JBoss层:
模块/系统/层/[层的名称]
这样做后,你还应该在模块/layers.conf
中包含你的层。您可以通过在键斗篷层后面写逗号来包含它,就像这样:
layers=keycloak,[your layer]
创建之后,您可以向层中添加插件,例如:
modules/system/layers/[name of your layer]/org/my/plugins/main
文件夹的内部将是:
你的罐子
- module.xml(根据其他模块创建)
然后你唯一要做的就是将这个模块作为依赖项包含在你的jboss-deployment-structure.xml中。(您总是包含模块的名称)
注意,您可能需要添加更多的库作为模块的依赖项。您可以将其全部包含在模块中
如果你不想手动创建这些东西,你可以创建像这样的jboss模块生成器。它将使用maven创建您的模块xml:
https://github.com/marcel-ouska/jboss-modules-builder
基本上,如果你想要一个简单的解决方案,你可以直接使用maven/Gradle插件将库添加到你的JAR/WAR中。
脂肪罐-http://tutorials.jenkov.com/maven/maven-build-fat-jar.html
- 战争-你的依赖自动打包
我不建议使用Fat JAR/WAR解决方案,因为添加更多插件可能会在依赖关系中丢失,并出现错误,例如重复依赖类的情况。
我是Hadoop的新手。我已将Gson API添加到我的Map减少程序中。当我运行程序获取时; 有谁能建议我如何向Hadoop添加第三方库吗?
问题内容: 如何在Google App Engine中添加Google不提供的第三方python库?我正在尝试在Google App Engine中使用BeautifulSoup,但无法这样做。但是我的问题是我想在Google App Engine中使用的任何库。 问题答案: 为了手动包括任何其他库,你必须将它们放在其中的目录中app.yaml。因此,例如,如果你具有以下结构: 然后hello.p
问题内容: 我想使用jQuery和其他不是React本身的第三方库。如何在我的React项目中使用它们?我读到的是调用第三方库的好地方。 不幸的是,即使我已经正确地将脚本标记链接到index.html文件中的那些库,但由于不断收到“未定义”错误,所以我无法使用这些库。 问题答案: 您有两个选择,均由一个人为设计的示例演示,其中我使用jQuery淡出了无序列表。两种方法都各有利弊,我先强调两种方法,
本文向大家介绍在SAPUI5项目中包括第三方库,包括了在SAPUI5项目中包括第三方库的使用技巧和注意事项,需要的朋友参考一下
我想从詹金斯那里向wildfly部署一个war文件。我尝试了很多方法,但都不管用 我使用了将WAR/EAR部署到wildfly插件,但它对我不起作用,我得到了错误: (致命:无法初始化命令上下文。生成步骤“将WAR/EAR部署到WildFly”将生成标记为失败已完成:失败), 我搜索了那个问题,但给出的答案对我没有帮助。 在我使用将WAR/EAR部署到容器的构建后操作中,它对我也不起作用,我得到了
我有一个web应用程序部署为使用Wildfly的爆炸战争。我想要得到的是 null 目前,我所处的情况是,我可以选择其中一个或另一个,但不能同时获得这两个选项(这意味着,要么每个jsp更改都强制进行新的部署,要么.class文件不强制进行新的部署)。 wildfly的当前配置(使用版本8.1.0)为 此外,我还发现,无论我在deployment-scanner配置中设置了什么,一旦服务器启动并运行