Maven 在JBossStudio下构建的简单Java项目osgi包不会在Fuse中运行

Maven 在JBossStudio下构建的简单Java项目osgi包不会在Fuse中运行,maven,jboss,osgi,bundle,jbossfuse,Maven,Jboss,Osgi,Bundle,Jbossfuse,我使用com.fazecast.jSerialCom-1.3.9.jar构建了一个串行com java项目来处理从常规com端口输入输出的数据。这似乎是非常常见的java项目。项目的纯Java jar将独立运行。不知何故,根据需要,我将它放入maven项目pom.xml的一部分依赖项中,并配置了插件的一部分,然后构建OSGI包将在Fuse操作中生成一个错误 <plugin> <groupId>org.apache.felix</

我使用com.fazecast.jSerialCom-1.3.9.jar构建了一个串行com java项目来处理从常规com端口输入输出的数据。这似乎是非常常见的java项目。项目的纯Java jar将独立运行。不知何故,根据需要,我将它放入maven项目pom.xml的一部分依赖项中,并配置了插件的一部分,然后构建OSGI包将在Fuse操作中生成一个错误

       <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.6</version>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>manifest</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
               <instructions>
                  <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                 <!--  <Import-Package>*,!com.fazecast.jSerialComm</Import-Package>  -->
                  <Embed-Dependency>jSerialComm</Embed-Dependency>
               </instructions>
            </configuration>
        </plugin>

org.apache.felix
maven捆绑插件
2.3.6
真的
进程类
显示
${project.artifactId}
jSerialComm

我使用com.fazecast.jSerialCom-1.3.9.jar构建了一个串行com java项目来处理从常规com端口输入输出的数据。这似乎是非常常见的java项目。项目的纯Java jar将独立运行。不知何故,根据需要,我将其放入maven项目pom.xml的依赖项中,并配置了插件的一部分,然后构建OSGI捆绑包将在Fuse操作中生成一个错误。

看起来不错。您需要单独安装附加的可传递依赖项

       <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.6</version>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>manifest</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
               <instructions>
                  <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                 <!--  <Import-Package>*,!com.fazecast.jSerialComm</Import-Package>  -->
                  <Embed-Dependency>jSerialComm</Embed-Dependency>
               </instructions>
            </configuration>
        </plugin>
在OSGi中,编译依赖项和运行时依赖项是分开处理的。在maven central中,您所需的大多数依赖项都将以OSGi捆绑包的形式出现


因此,只需使用mvn:groupId/artifactId/version语法作为捆绑包安装commons-lang3即可。

如果项目生成“错误”,则必须更改“某些内容”。这可能是你得到的最好答案。你必须更具体一些。确切的错误是什么?有一件事看起来很奇怪,那就是执行部分。我会尽量不说。还要确保您的项目是打包包。当我启动包时,我得到了:执行命令时出错:启动包时出错:无法启动包278:包camel-mode1-interface[278]中未解决的约束:无法解决278.1:缺少需求[278.1]osgi.willing.package;(osgi.willing.package=com.fazecast.jSerialComm)我删除了。。并添加。。返回,不是错误点:无法启动bundle 278:bundle camel-mode1-interface[278]中未解决的约束:无法解决278.2:缺少需求[278.2]osgi.willing.package;(&(osgi.wiring.package=org.apache.commons.lang3)(版本>=3.4.0)(!(版本>=4.0.0)))然而,pom.xml确实有org.apache.commons-lang3.4,我对>=3.4.0感到困惑,我不知道如何正确地添加commons-lang3。当我尝试将它作为一个功能安装时,它失败了,所以只使用“install..”作为osgi捆绑包,它就成功了。为什么?另外,为什么我只需要导入包就可以了!仅com.fazecast.jSerialComm,而我不需要以相同的方式配置其他依赖项?使用功能安装捆绑包或使用install-s应以相同的方式工作。如果依赖项是一个bundle,那么您通常不需要在构建时执行任何特殊操作。您只需让maven bundle插件创建导入包语句。如果它不是bundle,那么您可以像在配置中那样嵌入它。顺便说一句,jSerialComm似乎加载本机lib。。这可能需要额外的工作。。不过我不确定。最好的解决方案通常是只使用捆绑包。特别是如果您是初学者,我尝试在另一台服务器上重复这个过程,该服务器具有相同的/m2存储库和相同的项目,但没有互联网连接。不知何故,同样的安装mvn:groupid/artifactid/version赢了;t install,来自fuse控制台的错误指示“错误执行命令:错误安装bundle..”,该fuse服务器的某些配置丢失?您应该将m2 repo放置在默认的localation homeditory/.m2/存储库中。那么它应该可以工作了。m2在该服务器的homeditory下。但仍然无法安装。我甚至在这台服务器上安装我的项目包时也遇到了同样的错误,而同一个项目可以安装在我的另一台机器上(与internet连接的机器)。