2014-01-19 35 views
8

maven-bundle-plugin从版本2.3.5更新为版本2.4.0之后,运行mvn clean install会输出一些警告消息,这些消息我并不完全了解。例如。Maven Bundle插件:导出具有私有引用

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

我想这事做与嵌入式LIB(elasticsearch)。以下是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> 

错误消息究竟意味着什么? 解决此类问题的建议方法是什么?

回答

10

该消息表示在您的一个公共包(即您正在导出)中有一个类正在访问处于私有包(未导出的包)中的类。

嵌入罐子时,不得使用Export-Package来从嵌入罐子中声明包。它是为了从自己的包中声明包。您必须使用< _exportcontents>来导出org.elasticsearch.action.bulk。

+0

感谢您的回答,它的工作原理!但我一直认为嵌入式依赖包不应该被导出(不是捆绑API的一部分)。我错了吗? – Basil

+0

那么,这取决于...如果你正在嵌入一个jar是因为它不是作为一个包存在的,所以你不能把它的范围设置为“provided”。所以最好的办法是导出所有包含公共方法将需要的类的包。这条消息通常表明未来的班加载问题...... – Cristiano