我正在使用这个简单的pom.xml
使用maven-bundle-plugin
生成OSGi捆绑包:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.test.osgi</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>
这可以按预期工作(该项目包含一个公共类,我已经验证该类可以在捆绑包中导出)。现在,如果我将以下<configuration>
添加到插件中:<configuration>
<outputDirectory>D:\Test</outputDirectory>
</configuration>
构建失败,并出现以下错误:[INFO] --- maven-bundle-plugin:2.3.7:bundle (default-cli) @ test ---
[WARNING] Bundle de.test.osgi:test:bundle:0.0.1-SNAPSHOT : Classpath is empty. Private-Package and Export-Package can only expand from the classpath when there is one
[WARNING] Bundle de.test.osgi:test:bundle:0.0.1-SNAPSHOT : Instructions in Private-Package, or -testpackages that are never used: .*
Classpath:
[ERROR] Bundle de.test.osgi:test:bundle:0.0.1-SNAPSHOT : The JAR is empty: dot
[ERROR] Error(s) found in bundle configuration
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.891s
[INFO] Finished at: Fri Mar 30 14:49:46 CEST 2012
[INFO] Final Memory: 8M/20M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.felix:maven-bundle-plugin:2.3.7:bundle (default-cli) on project test: Error(s) found in bundle configuration -> [Help 1]
为什么类路径为空? <outputDirectory>
与它有什么关系?这是错误,还是我误解了?编辑
通过运行debug-output可以发现类路径确实与
<outputDirectory>
相同。默认情况下,这是mavens target
目录,因此他将在其中找到要包含在捆绑软件中的类。如果更改它,它将指向不包含要包含的类的目录。令人困惑的是,documentation for the plugin表示<outputDirectory>
是:生成的包的目录。
这是一个错误吗?
最佳答案
outputDirectory
也是已编写类的写入位置-有关空类路径“点”的错误是由于给maven-bundle-plugin一个空目录所致。
软件包插件将MANIFEST.MF写入outputDirectory位置,这也是它希望在其中查找该软件包的任何其他元数据(例如scr插件的输出)的位置。
您在使用编译器插件吗?如果不是,则它看起来像是捆绑插件中的错误,它在调用编译器时不遵循outputDirectory(但是在其他所有地方都遵循它)。
正如@nobeh指出的,如果${project.build.outputDirectory}
和outputDirectory
指向相同的位置,则应该没问题。