我只在Activator.start()函数中编写了以下代码
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
Node node = new Node() {
@Override
public Object setUserData(String arg0, Object arg1, UserDataHandler arg2) {
// TODO Auto-generated method stub
return null;
}
@Override
public void setTextContent(String arg0) throws DOMException {
// TODO Auto-generated method stub
}
@Override
public void setPrefix(String arg0) throws DOMException {
// TODO Auto-generated method stub
}
@Override
public void setNodeValue(String arg0) throws DOMException {
// TODO Auto-generated method stub
}
@Override
public Node replaceChild(Node arg0, Node arg1) throws DOMException {
// TODO Auto-generated method stub
return null;
}
@Override
public Node removeChild(Node arg0) throws DOMException {
// TODO Auto-generated method stub
return null;
}
@Override
public void normalize() {
// TODO Auto-generated method stub
System.out.println("normalize 方法调用");
}
@Override
public String lookupPrefix(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public String lookupNamespaceURI(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isSupported(String arg0, String arg1) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isSameNode(Node arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isEqualNode(Node arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isDefaultNamespace(String arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public Node insertBefore(Node arg0, Node arg1) throws DOMException {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean hasChildNodes() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasAttributes() {
// TODO Auto-generated method stub
return false;
}
@Override
public Object getUserData(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getTextContent() throws DOMException {
// TODO Auto-generated method stub
return null;
}
@Override
public Node getPreviousSibling() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getPrefix() {
// TODO Auto-generated method stub
return null;
}
@Override
public Node getParentNode() {
// TODO Auto-generated method stub
return null;
}
@Override
public Document getOwnerDocument() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getNodeValue() throws DOMException {
// TODO Auto-generated method stub
return null;
}
@Override
public short getNodeType() {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getNodeName() {
// TODO Auto-generated method stub
return null;
}
@Override
public Node getNextSibling() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getNamespaceURI() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getLocalName() {
// TODO Auto-generated method stub
return null;
}
@Override
public Node getLastChild() {
// TODO Auto-generated method stub
return null;
}
@Override
public Node getFirstChild() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getFeature(String arg0, String arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public NodeList getChildNodes() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getBaseURI() {
// TODO Auto-generated method stub
return null;
}
@Override
public NamedNodeMap getAttributes() {
// TODO Auto-generated method stub
return null;
}
@Override
public short compareDocumentPosition(Node arg0) throws DOMException {
// TODO Auto-generated method stub
return 0;
}
@Override
public Node cloneNode(boolean arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Node appendChild(Node arg0) throws DOMException {
// TODO Auto-generated method stub
return null;
}
};
node.normalize();
}
在eclipse环境中运行时一切顺利,但是,在发布产品时,运行时记录错误:
根异常: java.lang.NoClassDefFoundError:org / w3c / dom / Node
引起:java.lang.ClassNotFoundException:org.w3c.dom.Node
任何人都可以提供帮助吗?
答案 0 :(得分:7)
OSGi默认提供对系统包的访问,但只提供java。*包,这不包括其他包,如:javax.net,javax.xml,com.sun
因此,有必要为OSGi框架指定任何此类包,以通过系统包将它们导出,使其可以被导入它们的其他包访问。
为此,您需要使用捆绑包所需的其他包设置配置属性,尝试在启动OSGi框架之前将其设置为系统属性,以便在首次启动时获取此属性。
假设您使用的是OSGi 4.2,该属性将配置为:
org.osgi.framework.system.packages.extra=org.w3c.dom
您可能需要查看Apache Felix Framework Configuration Properties以获取更多详细信息,尽管此属性是OSGi规范的一部分,因此也可以在其他实现中使用
答案 1 :(得分:1)
请更新您的问题以包含该套装的MANIFEST.MF
看起来你的作品中没有隐式提供org.w3c.dom。检查Import-Package标头,可能是您没有Import-Package: org.w3c.dom
答案 2 :(得分:0)
如果您使用的是Equinox,可以编辑config.ini并将“org.w3c.dom”添加到 org.osgi.framework.system.packages 键并导入相同的包MANIFEST.MF
答案 3 :(得分:0)
在我的情况下添加
org.osgi.framework.bootdelegation=xx...xxx,org.w3c.dom
解决了我的问题。