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