我使用这个简单的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]
为什么classpath为空? <outputDirectory>
与它有什么关系?这是一个错误,还是我误解了什么?
修改
使用debug-output运行显示类路径确实与<outputDirectory>
相同。默认情况下,这是mavens target
目录,因此他会在那里找到要包含在类中的类。如果我更改它,它将指向一个不包含要包含的类的目录。令人困惑的是,documentation for the plugin表示<outputDirectory>
是:
生成的包的目录。
这是一个错误吗?
答案 0 :(得分:2)
outputDirectory
也是编译类的编写位置 - 关于空类路径“dot”的错误是由于给maven-bundle-plugin一个空目录。
bundle插件将MANIFEST.MF写入outputDirectory位置,这也是它希望为bundle找到任何其他元数据(例如scr插件的输出)的地方。
您使用的是编译器插件吗?如果不是它看起来像bundle插件中的一个错误,它在调用编译器时不尊重outputDirectory(但在其他地方尊重它)。
正如@nobeh指出的那样,如果${project.build.outputDirectory}
和outputDirectory
指向同一位置,您应该没问题。
答案 1 :(得分:1)
首先我建议检查你的捆绑配置,而且我永远不会在特定的平台相关路径中使用绝对路径,如D:\等。另一方面,Maven中的默认值是放置创建输出的目标文件夹。根据文档,必须有更多配置。
答案 2 :(得分:0)
这是一个疯狂的猜测,但请尝试D:/Test
或D:\\Test
。