AEM/CQ - javax.xml.namespace 无法解析 OSGI 依赖

AEM/CQ - javax.xml.namespace can't resolve OSGI dependency

我正在使用 AEM 6.2,目前正在实施 WebService。 我将所有依赖 jar 包含在我在外部创建的 OSGI 包中,所有依赖问题都得到解决,除了一个:

javax.xml.namespace,version=[1.0,2) -- Cannot be resolved

当我使用 depfinder 工具检查 maven 时,它显示如下:

<dependency>
    <groupId>org.apache.sling</groupId>
    <artifactId>org.apache.sling.fragment.ws</artifactId>
    <version>1.0.2</version>
    <scope>provided</scope>
</dependency>

但是,在我的其他自定义项目中,javax.xml.namespace 显示已解决状态。

我遇到了这种情况,非常感谢任何指点。

谢谢, 吉尼特

maven central 中有 58 个工件导出 javax.xml.namespace,版本匹配 [1.0,2)。一个安全的选择可能是来自 servicemix:

的包装 javaxp-api

Gradle:

'org.apache.servicemix.specs:org.apache.servicemix.specs.jaxp-api-1.4:2.8.0'

马文:

<dependency>
    <groupId>org.apache.servicemix.specs</groupId>
    <artifactId>org.apache.servicemix.specs.jaxp-api-1.4</artifactId>
    <version>2.8.0</version>
</dependency>

如果您仔细查看 "Package Dependency" 工具的输出,您会看到 Maven 依赖项的版本为 1.0.2。另一方面,此软件包的 exported 版本是 0.0.0.fragment_xml

我不知道为什么会这样,但这意味着您需要使用一些变通方法来针对此版本解析您的捆绑包。

您基本上需要做的是更新您的 MANIFEST.MF 并将导入的版本从 1.0.2 更改为 0.0.0.fragment_xml

我们正在使用 Maven 和 maven-bundle-plugin 插件来实现这一点:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Import-Package>
                javax.xml.namespace;version="0.0.0.fragment_xml",
                *
            </Import-Package>
        </instructions>
    </configuration>
</plugin>

希望对您有所帮助。