默认包'.'在Import-Package语法中不被允许。

11

尝试在Intellij IDEA中运行@org.junit.Test。

这是一个OSGi bundle,当点击“Run 'testMyTest'”时。

出现以下异常:

Error:osgi: [b2b-bundle] The default package '.' is not permitted by the Import-Package syntax. 
    This can be caused by compile errors in Eclipse because Eclipse creates 
    valid class files regardless of compile errors.
    The following package(s) import from the default package null

有人可以友好地解释一下这个异常吗?

谢谢, 彼得


是的,我一直在谷歌上搜索相关内容,找到了几篇博客文章。当我进行干净的安装时可以正常工作,在 Eclipse 中也能正常使用,但在 IntelliJ 中就不行了... 它没有使用 jdom。 - Peter
8个回答

8
你可能没有将类放在一个包中。
添加:
package your_package_name;

在你的 .java 文件顶部添加这行代码,然后就可以了。

PS:根据你的包名,你可能还需要将该文件移动到其他位置。


2
据我所了解,关于OSGi库,.class文件位于不应该存在的位置,因为这个库的结构中有根包中的依赖项。
查看这篇博客可以获得更多细节。

这个 bundle 在其依赖声明中有 143 个 Bundle,它不使用 JDom。 - Peter
我知道博客中展示的特定示例使用了JDom,但本质上你面临的问题是相同的。你的依赖项位置有问题。添加更多的错误输出以便于分析。 - coderrick
你解决了吗?算了,既然剩下的 .class 文件搞乱了你的构建,我猜做一个 "clean install" 就能解决问题了。 - coderrick

1

在删除“classes”、“obr”和“\container\tomcat8x\cargo-confluence-home”文件夹后,我进行了修复,然后只运行atlas-package。


0
如果您使用Maven,只需使用:
mvn clean

问题已解决。我受到了@Landaida的启发。


0
在我的情况下,是JDOM插件出了问题。当前已接受答案中链接的博客[1]提供的解决方案听起来很合理。通过一些神秘的pom.xml Maven魔法从JDOM中删除顶级类。
结果发现我错误地声明了maven-bundle-plugin的依赖关系,因为我错误地将其放入了中,而不是中。该插件依赖于JDOM,并且我正在捆绑传递依赖项。修复我的依赖声明清除了问题。
[1] https://techotom.wordpress.com/2014/10/21/fixing-the-default-package-is-not-permitted-by-the-import-package-syntax-with-maven-bundle-plugin/

0
在aQute.bnd.osgi.Descriptors.PackageRef类的构造函数内添加一个条件断点(binaryName.equals(".");),并检查哪个依赖项出了问题。

0

这个错误信息也可能是由于https://github.com/bndtools/bnd/issues/1848引起的,其中bnd.bnd文件具有类似于以下内容的指令:

Bundle-Activator: ${classes;IMPLEMENTS;org.osgi.framework.BundleActivator}

当没有实现BundleActivator的类时,BND会打印出这个错误信息,这可能会让人感到困惑。


0
可能存在导致错误的依赖关系(使用默认包)。你只需要找到它。
在我的情况下,在打包插件时执行“atlas-package”时,我接受了这样的错误。
在我的情况下,那是一个依赖关系:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>4.1.6.RELEASE</version>
</dependency>

幸运的是,那不是关键问题,所以我只是将其删除了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接