我正在尝试从源代码构建protege-server(https://github.com/protegeproject/org.protege.owl.server)。我下载了源代码。使用“mvm -X package”会产生以下错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.
0:compile (default-compile) on project org.protege.owl.server: Compilation failu
re
[ERROR] /c:/Users/user/Programs/webprotege/org.protege.owl.server-master/src/mai
n/java/org/protege/owl/server/connect/local/OSGiLocalTransport.java:[11,32] type
org.osgi.framework.ServiceRegistration does not take parameters
根据上一个问题,OSGI博客文章解释说该问题已在该库的后期版本(4.3.1)中修复。
我试图在POM.xml文件中引用该库的更新版本:
<dependency>
<groupId>org.osgi</groupId>
<artifactId>core</artifactId>
<version>6.0.0</version>
<scope>system</scope>
<systemPath>/c:/Users/user/Downloads/osgi.core-6.0.0.jar</systemPath>
</dependency>
甚至下载了较新版本以专门定位它。
错误仍然存在。有什么办法可以解决吗?
编辑:
尝试@Balazs Zsoldos建议的解决方案没有帮助,我收到了同样的错误消息。我注意到这个包的引入(org.osgi.framework)引用版本1:
<Bundle-Activator>org.protege.owl.server.Activator</Bundle-Activator>
<Bundle-SymbolicName>org.protege.owl.server</Bundle-SymbolicName>
<Bundle-Vendor>The Protege Development Team</Bundle-Vendor>
<Embed-Dependency>antlr, antlr-runtime, stringtemplate</Embed-Dependency>
<Export-Package>org.protege.owl.server*;version=2.0.6-SNAPSHOT</Export-Package>
<Import-Package>!org.antlr.stringtemplate,
!org.apache.commons.cli,
org.osgi.framework;version="1",
*</Import-Package>
尝试删除此行也没有帮助,因为它出现在另一个依赖关系下游。我无法找到如何覆盖下游import-package指令。
由eclipse生成的有效pom.xml附加为链接:https://docs.google.com/document/d/1eHFalUHVZ45ejLes_eqaXLw6ttjcTryphbGr_CKbhRk/edit?usp=sharing
答案 0 :(得分:0)
问题是旧版本的osgi.core仍然在它们的类路径中,因为它们是使用不同的组和工件ID导入的。将pom.xml拖放到eclipse中,然后查看pom编辑器的Dependency Hierarchy选项卡以获取更多信息。
以下两个是依赖项导入的:
要解决此问题,您应添加以下依赖项:
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
因为这不会覆盖 org.apache.felix:org.osgi.core 依赖关系,所以排除那个:
<dependency>
<groupId>net.sourceforge.owlapi</groupId>
<artifactId>owlapi-distribution</artifactId>
<version>3.4.5</version>
<exclusions>
<exclusion>
<groupId>org.apache.felix</groupId>
<artifactId>org.osgi.core</artifactId>
</exclusion>
</exclusions>
</dependency>
(并删除系统范围的依赖关系,因为您不需要它,并且其artifactId与标准不同)。
修改强>
刚才意识到旧的osgi.core包也在 org.apache.felix:org.apache.felix.framework 里面,由 ProtegeLauncher 通过<传递EM> org.apache.felix:org.apache.felix.main:4.0.3 。这意味着你应该
我尝试了第二个问题,另一个问题是无法从maven中心下载surfire插件(或类似的东西,你会看到)。
备注强>
这个protege库的开发人员显然不熟悉maven依赖管理的工作原理以及应该作为依赖项导入的内容。该项目传递一个永远不会发生的OSGi运行时环境。对于编译,只应导入API,如果目标运行时肯定包含该API,则应使用提供的范围导入API。我建议