我需要将哪些选项添加到maven构建或java运行时才能访问内部sun.security类?来自Akamai的Java代码在OSGI包中需要访问内部sun.security类。 Apache Felix控制台为OSGI包提供了错误:
sun.awt.image.codec -- Cannot be resolved
sun.io -- Cannot be resolved
sun.misc -- Cannot be resolved
sun.rmi.rmic -- Cannot be resolved
sun.security.action -- Cannot be resolved
sun.security.ec -- Cannot be resolved
sun.security.internal.interfaces -- Cannot be resolved
...
我看了this article about using internal sun classes,但它只是指javac。我的maven构建开始如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd ">
<modelVersion>4.0.0</modelVersion>
<artifactId>cdncache</artifactId>
<packaging>bundle</packaging>
<name>NCDN Cache</name>
<description>Classes and interfaces to expire resource from the Akamai CDN cache [build:${build.number}]\
</description>
<version>1.0-${build.number}</version>
<properties>
<!-- Skip tests, so maven execution is faster. -->
<maven.test.skip>true</maven.test.skip>
<file.encoding>utf-8</file.encoding>
</properties>
<build>
<plugins>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.0.1</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>
com.nymag.akamai,
com.akamai.*,
...
</Export-Package>
<Private-Package>
org.apache.axis.*,
...
sun.security,
sun.security.ec,
</Private-Package>
<Bundle-Version>1.0</Bundle-Version>
<Bundle-Activator>com.nymag.akamai.Activator</Bundle-Activator>
</instructions>
</configuration>
</plugin>
...
答案 0 :(得分:23)
我同意stjohnroe的说法,使用特定于VM的类通常很糟糕,但有时你必须(例如,因为你目前处于过渡阶段)。如果您想这样做,可以添加
org.osgi.framework.system.packages.extra=sun.your.package.of.choice
到框架属性。如果您使用标准的Felix启动器,则可以为此编辑conf/config.properties
。
答案 1 :(得分:1)
所有这些都是非公共API类,并且不能依赖它们存在于所有jre发行版中。我相信它们都是现在的Sun发行版,但不是IBM发行版等。尝试针对Sun发行版进行运行,但这看起来像是针对未记录的功能构建的一个案例,这是一个很大的不行。