Felix Bundle有很多错误的进口

时间:2013-12-19 10:27:06

标签: maven osgi

我对felix-bundle插件感到非常困惑。文档说明了Import-Package标签

  

很少需要明确指定此标头。但是,在某些情况下,如果存在不需要的导入,可以使用否定包模式删除此类导入

但是我正在构建一个插件,它似乎导入了很多我不想要的东西。 javax.servlet和junit。*和org.junit。*,和org.testng以及一些apache日志包一样。所有这些都使我的软件包崩溃,并且缺少需求错误。

问题是,我不知道为什么这些被包含在第一位。非常困惑。欢迎帮助。

在回答答案时,AFAIK,我在代码中的任何地方都没有使用javax.servlet。我的POM目前看起来像这样。我不得不排除许多破坏负荷的包裹。

一切都变成了一场噩梦!

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
      <groupId>org.sonatype.oss</groupId>
      <artifactId>oss-parent</artifactId>
      <version>7</version>
    </parent>



        <groupId>uk.org.russet</groupId>
    <artifactId>uk.org.russet.protege.nrepl-clojure</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <name>protege-nrepl</name> 
    <description>Provide an NREPL client to use Clojure inside Protege</description>

    <packaging>bundle</packaging>


    <dependencies>
          <dependency>
            <groupId>uk.org.russet</groupId>
            <artifactId>nrepl-clojure</artifactId>
            <version>1.0.0</version>
          </dependency>

      <!--dependency>
        <groupId>edu.stanford.protege</groupId>
        <artifactId>org.protege.common</artifactId>
        <version>5.0.0-beta-05-SNAPSHOT</version>
            <scope>provided</scope>
      </dependency-->

          <dependency>
        <groupId>edu.stanford.protege</groupId>
        <artifactId>org.protege.editor.core.application</artifactId>
        <version>5.0.0-beta-05-SNAPSHOT</version>
            <scope>provided</scope>
          </dependency>

          <dependency>
        <groupId>edu.stanford.protege</groupId>
            <artifactId>org.protege.editor.owl</artifactId>
        <version>5.0.0-beta-05-SNAPSHOT</version>
            <scope>provided</scope>
          </dependency>
    </dependencies>

    <build>
      <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.0</version>
              <configuration>
                <source>1.6</source>
                <target>1.6</target>
              </configuration>
            </plugin>
            <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <version>2.3.7</version>
          <extensions>true</extensions>
          <configuration>
        <instructions>
          <Bundle-ClassPath>.</Bundle-ClassPath>
          <Bundle-SymbolicName>${project.artifactId};singleton:=true</Bundle-SymbolicName>
          <Bundle-Vendor>The Protege Development Team</Bundle-Vendor>
          <Import-Package>
                    !javax.servlet*,!junit.*,!org.junit*,!org.apache.*,
                    !org.testng.*,!sun.misc.*,org.protege.editor.*,
                    org.protege.editor.core,org.protege.editor.core.ui.workspace,
                    org.protege.editor.owl.model,org.protege.editor.core.editorkit,
                    org.semanticweb.owlapi.model, *
          </Import-Package>
          <Include-Resource>plugin.xml, {maven-resources}</Include-Resource>
                  <Embed-Transitive>true</Embed-Transitive>
                  <Embed-Dependency>*;scope=compile</Embed-Dependency>
        </instructions>
        <executions>
          <execution>
            <id>bundle-manifest</id>
            <phase>install</phase>
            <goals>    
              <goal>manifest</goal>
            </goals>   
          </execution>
        </executions>
          </configuration>
            </plugin>
            <plugin>
              <artifactId>maven-eclipse-plugin</artifactId>
              <version>2.9</version>
              <configuration>
                <pde>true</pde>
              </configuration>
            </plugin>
        </plugins>
    </build>
</project>

1 个答案:

答案 0 :(得分:0)

添加依赖项是因为bundle中的某些代码使用了这些包。例如,如果您的任何代码使用javax.servlet,则捆绑包必然会导入javax.servlet。所以这个进口至少看似合理。

当然,测试库的导入似乎并不合理。它表明你的测试已经包含在你的捆绑中,与“真正的”类一起,这不应该发生。您是否将测试保存在与真实类相同的源文件夹中?在单独的源文件夹中编写测试代码是正常的,建议的做法;在Maven中,这通常是src/test/java

如果情况并非如此,那么您应该显示已使用的配置。