我有一个正在建设的Maven项目,我正在尝试添加对twitter4j的引用。
所以我把它添加到pom:
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>[2.2,)</version>
<type>jar</type>
<optional>false</optional>
<scope>compile</scope>
</dependency>
当我构建(mvn clean install)时,我得到:
[ERROR] Error building bundle net.stevex.tweetfetcher:tweetfetcher-bundle:bundle:1.0-SNAPSHOT : Unresolved references to [twitter4j] by class(es) on the Bundle-Classpath[Jar:dot]: [net/stevex/tweetfetcher/impl/TweetFetcherImpl.class]
这是有道理的... twitter4j包没有嵌入到捆绑包中。所以我在maven-bundle-plugin的指令中添加了一个Embed-Dependency:
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
现在当我建立时,我得到:
[ERROR] Error building bundle net.stevex.tweetfetcher:tweetfetcher-bundle:bundle:1.0-SNAPSHOT : Unresolved references to [dalvik.system, javax.crypto, javax.crypto.spec, javax.management, javax.management.openmbean, org.apache.commons.logging, org.apache.log4j, org.slf4j.impl, twitter4j.internal.http.alternative] by class(es) on the Bundle-Classpath[Jar:dot, Jar:twitter4j-core-2.2.3.jar]: [twitter4j/internal/logging/CommonsLoggingLogger.class, twitter4j/internal/logging/Log4JLoggerFactory.class, twitter4j/auth/OAuthToken.class, twitter4j/internal/http/HttpClientFactory.class, twitter4j/auth/OAuthAuthorization.class, twitter4j/internal/logging/Log4JLogger.class, twitter4j/conf/ConfigurationBase.class, twitter4j/TwitterAPIMonitor.class, twitter4j/internal/logging/CommonsLoggingLoggerFactory.class, twitter4j/management/APIStatisticsOpenMBean.class, twitter4j/internal/logging/Logger.class]
我不明白为什么缺少twitter4j类,而且我不理解对dalvik.system,javax.crypto等的引用。这里有什么问题?
答案 0 :(得分:3)
问题是twitter4j项目需要错误列表中列出的所有软件包。使用它时不包括所有传递依赖项。 maven-bundle-plugin有一个Embed Transitive指令,它将嵌入所有传递依赖项
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
然而,这种打败了OSGi的目的。这让我知道两个选项:
在SpringSource EBR中的第二个搜索包。您只需在搜索框中输入包名称,结果将包含POM文件的xml。 SpringSource包将包含对EBR中其他包的引用,消除了传递依赖的问题。
使用maven-bundle-plugin的bundle-all目标。此目标将为项目的每个依赖项运行maven bundle插件,并将生成的bundle放入目标目录中。然后,您可以将这些软件包安装到本地存储库中。
我建议您使用选项1作为您可以找到的尽可能多的捆绑包,然后在SpringSource没有它们时默认为选项2。