gpt4 book ai didi

netbeans-platform - 传递第三个库对象时出现 Netbeans 平台链接错误

转载 作者:行者123 更新时间:2023-12-04 16:49:56 27 4
gpt4 key购买 nike

嗨,我在 Netbeans 平台中遇到模块设计问题。

我的例子解释了这个问题:

我的项目:

Test-API (API module)
SP1 (ServiceProvider interface)
SP2 (ServiceProvider interface)

Test-Module1
SP1Impl (ServiceProvider class implements SP1)

Test-Module2
SP2Impl (ServiceProvider class implements SP2)

Test-Module3
TestAction

SP1:
package linkagetest.api;

import org.jdom2.Element;

public interface SP1 {
public Element create();
}

SP2:
package linkagetest.api;

import org.jdom2.Element;

public interface SP2 {
public void doStuff(Element element);
}

SP1Impl:
package linkagetest.mod1;

import linkagetest.api.SP1;
import org.jdom2.Element;
import org.openide.util.lookup.ServiceProvider;

@ServiceProvider(service = SP1.class)
public class SP1Impl implements SP1 {

@Override
public Element create() {
return new Element("BLA");
}
}

SP2Impl:
package linkagetest.mod2;

import linkagetest.api.SP2;
import org.jdom2.Element;
import org.openide.util.lookup.ServiceProvider;

@ServiceProvider(service = SP2.class)
public class SP2Impl implements SP2 {

@Override
public void doStuff(Element element) {
element.addContent(new Element("BLA"));
}
}

测试 Action :
package linkagetest.mod3;

import linkagetest.api.SP1;
import linkagetest.api.SP2;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionRegistration;
import org.openide.util.Lookup;
import org.openide.util.NbBundle.Messages;

@ActionID(category = "File", id = "linkagetest.mod3.TestAction")
@ActionRegistration(displayName = "#CTL_TEST")
@ActionReference(path = "Menu/File", position = 1300)
@Messages("CTL_TEST=TEST")
public final class TestAction implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
SP1 sp1 = Lookup.getDefault().lookup(SP1.class);
SP2 sp2 = Lookup.getDefault().lookup(SP2.class);

// and this is where the linkage fails
sp2.doStuff(sp1.create());
}
}

我得到:
java.lang.LinkageError: loader constraint violation: loader (instance of org/netbeans/StandardModule$OneModuleClassLoader) previously initiated loading for a different type with name "org/jdom2/Element"

我明白为什么 org.jdom2.Element在 Module1 和 Module2 中不是同一个类实例,但是我应该如何设计这样的层次结构而不会出现 LinkageError?如何传递对象?

最佳答案

好的,我想通了。我必须只提供一个模块的库并将包声明为公共(public)包。

所以在 pom.xmlTest-API模块我添加了公共(public)包:

<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>nbm-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<publicPackages>
<publicPackage>linkagetest.api</publicPackage>
<publicPackage>org.jdom2</publicPackage>
</publicPackages>
</configuration>
</plugin>
...

关于netbeans-platform - 传递第三个库对象时出现 Netbeans 平台链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22034735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com