2010-12-16 4 views
2

Welche Optionen muss ich dem Maven Build oder der Java Runtime hinzufügen, um auf die internen sun.security Klassen zugreifen zu können? Es gibt Java-Code von Akamai in einem OSGI-Bundle, der Zugriff auf interne sun.security-Klassen benötigt. Die Apache Felix Konsole gibt Fehler für das OSGi-Bundle:Wie kann von einem OSGI-Paket auf die interne sun.security-Klasse zugegriffen werden?

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 
... 

ich this article about using internal sun classes aussah, aber es bezieht sich nur auf javac. Mein Maven Build beginnt wie:

<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

Danke für die Bearbeitung, ich habe immer noch das Problem gegraben, als ich die Frage gestellt habe. –

Antwort

1

Alle diese sind nicht öffentliche Klassen API und nicht darauf verlassen können, die in allen jre Verteilungen sein. Ich glaube, dass es sich um alle vorhandenen Sun-Distributionen handelt, aber nicht in IBM-Distributionen usw. Versuchen Sie, gegen eine Sun-Distribution zu laufen, aber dies sieht wie ein Fall aus, bei dem undokumentierte Funktionen aufgebaut werden, ein großes Nein.

+1

Der Akamai-Code verwendet einige alte Bibliotheken, die interne sun. * -Klassen aufrufen. Ich habe schon einige Zeit damit verbracht, die JRE-Unterschiede auf die harte Tour herauszufinden (MacOS X vs. Linux). –

+0

Ich werde den fehlerhaften Code aus dem OSGI-Paket entfernen und in einen eigenständigen Dienst stellen, bis ich ihn loswerden kann. –

+0

Die richtige Antwort ist die von Angelo unten. –

21

Ich stimme mit stjohnroe überein, dass die Verwendung von VM-spezifischen Klassen in der Regel schlecht ist, aber manchmal müssen Sie (zum Beispiel, wie Sie gerade in einer Übergangsphase sind). Wenn Sie dies wünschen, können Sie den Framework-Eigenschaften

hinzufügen. Wenn Sie den Standard-Felix-Launcher verwenden, können Sie dafür conf/config.properties bearbeiten.

+0

Interessante Idee, so kann OSGI gezwungen werden, interne Klassen zuzulassen. –

+3

Angelos Antwort ist korrekt. Es ist eine Schande, dass Sie bereits die falsche Antwort akzeptiert haben. –

+0

Nice Anruf +1 von mir – stjohnroe

Verwandte Themen