我对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>
答案 0 :(得分:0)
添加依赖项是因为bundle中的某些代码使用了这些包。例如,如果您的任何代码使用javax.servlet
,则捆绑包必然会导入javax.servlet
。所以这个进口至少看似合理。
当然,测试库的导入似乎并不合理。它表明你的测试已经包含在你的捆绑中,与“真正的”类一起,这不应该发生。您是否将测试保存在与真实类相同的源文件夹中?在单独的源文件夹中编写测试代码是正常的,建议的做法;在Maven中,这通常是src/test/java
。
如果情况并非如此,那么您应该显示已使用的配置。