2014-01-19 8 views
8

Nach der Aktualisierung der maven-bundle-plugin von Version 2.3.5 auf Version 2.4.0 läuft mvn clean install gibt einige Warnmeldungen aus, die ich nicht vollständig verstehe. Z.B.Maven Bundle Plugin: Export hat private Referenzen

Export ch.entwine.weblounge.contentrepository.impl.index, has 1, private references [org.elasticsearch.action.bulk]

Ich denke, das hat etwas mit einem eingebetteten lib (Elasticsearch) zu tun. Hier sind Teile des POM:

<dependencies> 
    ... 
    <dependency> 
    <groupId>org.elasticsearch</groupId> 
    <artifactId>elasticsearch</artifactId> 
    <version>0.19.9</version> 
    </dependency> 
    ... 
</dependencies 
... 
<Export-Package> 
    ... 
    ch.entwine.weblounge.contentrepository.impl.index 
    ... 
</Export-Package> 
<Embed-Dependency> 
    .... 
    elasticsearch;inline=true 
    ... 
</Embed-Dependency> 

Was bedeutet die Fehlermeldung genau? Was ist der empfohlene Weg, um solche Probleme zu lösen?

Antwort

10

Diese Nachricht bedeutet, dass in einem Ihrer öffentlichen Pakete (das Sie exportieren) eine Klasse vorhanden ist, die auf eine Klasse in einem privaten Paket zugreift (ein Paket, das nicht exportiert wird).

Bei der Einbettung von Jars müssen Sie das Export-Package nicht verwenden, um Pakete aus den eingebetteten Jars zu deklarieren. Sie deklarieren die Pakete aus dem eigenen Paket. Sie müssen < _exportcontents> verwenden, um org.elasticsearch.action.bulk zu exportieren.

+0

Danke für Ihre Antwort, es funktioniert! Aber ich dachte immer, dass Pakete aus eingebetteten Abhängigkeiten nicht exportiert werden sollten (nicht Teil der Bundle API). Liege ich damit falsch? – Basil

+0

naja, das kommt darauf an ... wenn du ein jar einbettest ist da es nicht als bundle existiert, also kannst du es nicht als "bereitgestellt" einstellen. Am besten exportieren Sie alle Pakete, die Klassen enthalten, die Ihre öffentlichen Methoden benötigen. Diese Nachricht ist normalerweise ein Hinweis auf ein zukünftiges Classloading-Problem ... – Cristiano