Java OSGI可传递依赖项级别

Java OSGI可传递依赖项级别,java,apache,maven,osgi,bundle,Java,Apache,Maven,Osgi,Bundle,我目前正在尝试捆绑一个非OSGiMaven项目。现在,我有点像 <?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://ma

我目前正在尝试捆绑一个非OSGiMaven项目。现在,我有点像

 <?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<!-- The Basics -->
<artifactId>Project1</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>internal.commons</groupId>
        <artifactId>internalcommons</artifactId>
        <version>1.5</version>
    </dependency>
    <dependency>
        <groupId>jdom</groupId>
        <artifactId>jdom</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies> 
<parent>
    <groupId>internal</groupId>
    <artifactId>jar-project</artifactId>
    <version>1.0</version>
</parent>
<name>Project 1</name>

<build> 
    <directory>${basedir}/bundles</directory>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.7</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Name>${project.name}</Bundle-Name>
                    <Bundle-Version>1.0</Bundle-Version>
                    <Import-Package>*;resolution:=optional</Import-Package>
                    <Embed-Dependency>*</Embed-Dependency>
                    <Embed-Transitive>true</Embed-Transitive>
                </instructions>
            </configuration>
        </plugin>       
    </plugins>  
</build>

4.0.0
项目1
1
罐子
内部公共空间
内部公地
1.5
Java文档对象模型
Java文档对象模型
1
内部的
jar项目
1
项目1
${basedir}/bundles
maven jar插件
${project.build.outputDirectory}/META-INF/MANIFEST.MF
org.apache.felix
maven捆绑插件
2.3.7
真的
${project.groupId}.${project.artifactId}
${project.name}
1
*;分辨率:=可选
*
真的

然而,我的非osgi包依赖于各种不同的jar,其中一些jar也有依赖关系。当我绑定nonosgimaven项目时,我只能得到这个绑定的直接依赖项,当我使用bundleall时,我得到一个与xmlapi相关的错误:xmlapi:jar:2.6.2。如果没有其他选择,我可以创建一个包含所有依赖项的包,但是依赖项太多了

任何帮助都将不胜感激

根据发布的stacktrace,在中没有
XMLAPI:XMLAPI:2.6.2
工件。我想应该是这样。 以下是更新的pom,它在嵌入DEP时没有问题:

<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- The Basics -->
    <groupId>internal</groupId>
    <artifactId>Project1</artifactId>
    <version>1.0</version>
    <packaging>bundle</packaging>

    <name>Project 1</name>

    <dependencies>
        <dependency>
            <groupId>jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xmlParserAPIs</artifactId>
            <version>2.6.2</version>
        </dependency>
    </dependencies> 

    <build> 
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.3.7</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                        <Bundle-Name>${project.name}</Bundle-Name>
                        <Bundle-Version>1.0</Bundle-Version>
                        <Import-Package>*;resolution:=optional</Import-Package>
                        <Embed-Dependency>*</Embed-Dependency>
                        <Embed-Transitive>true</Embed-Transitive>
                    </instructions>
                </configuration>
            </plugin>       
        </plugins>  
    </build>

</project>

4.0.0
内部的

等。

您有哪些与xml API相关的错误?您可以显示您的pom吗?添加了pom,如果我运行仅使用bundle:bundle粘贴的当前pom,我会得到由以下原因引起的运行时错误:java.lang.ClassNotFoundException:com.sun.org.apache.xml.internal.serialize.OutputFormat未找到。Bundle:bundleall导致无法在project 1上执行goal org.apache.felix:maven Bundle plugin:2.3.7:bundleall(默认cli):repoxml API中未找到工件:xml API:jar:2.6.2:compile:无法在Nexusi中找到工件xml API:xml API:jar:2.6.2如果可能,请,用依赖项更新pom,让我们对其进行实验。更新pom,另一个注意事项是internal.commons本身有各种依赖项,我认为这就是问题所在。我做运行时反射是为了使用bundle,有时依赖项不存在;resolution:=optional是一个糟糕的做法,在应用程序开始运行后很长一段时间内,它将在运行时出现类not found异常!此外,盲目地嵌入所有内容会增加导入包路径中无法在编译时解决的包的数量。所以使用*true也是个坏主意。。。不幸的是,除了手工做所有的脏活之外,没有办法解决这个问题。你为什么不试着回答原来的问题,即osgify,你所有的直觉?这绝对是更好的解决方案,尤其是如果您有足够的时间和金钱,并且其他DEP对osgi友好(没有不同的线程上下文类加载问题,总是通过显式提供的类加载器加载类,没有spi使用,等等)