1

我一直在尝试在一个 osgi 包的项目中使用 querydsl。我的 pom.xml 具有以下依赖项:

    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>2.5.0</version>

    </dependency>

    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>2.5.0</version>
    </dependency>

以及插件

        <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>maven-apt-plugin</artifactId>
            <version>0.3.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/generated-sources/java</outputDirectory>
                        <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    <plugin>
            <groupId>org.ops4j</groupId>
            <artifactId>maven-pax-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <!-- | the following instructions build a simple set of public/private 
                classes into an OSGi bundle -->
            <configuration>
                <instructions>
                    <Import-Package>com.mysema.query.jpa,*</Import-Package>
                    <Export-Package>com.mypackage.package.*;version="${project.version}"</Export-Package> 
                </instructions>
            </configuration>
        </plugin>

仍然当我尝试启动捆绑包时,我得到:

 Error executing command: Unresolved constraint in bundle com.mypackage.package [163]: Unable to resolve 163.0: missing requirement [163.0] package; (&(package=com.mysema.query.jpa)(version>=2.5.0)(!(version>=3.0.0)))

我使用的是旧版本的 querydsl,但显然他们最近修复了一些关于 osgi 的东西,所以我升级了。问题仍然存在。

让querydsl在osgi中工作我缺少什么?

4

1 回答 1

2

手动安装每个依赖项会很痛苦,但是 AFAIK 没有任何东西可以使用 Maven 工件并链接所有依赖项——这会失败,因为它会在哪里停止?

您最终可能会得到每个日志框架的每个版本(即使您安装了 pax-logging),或者错误的实现。

唉,在 maven 的情况下,目前没有办法应用语义版本控制或更高级别的需求和能力。(虽然 BND (maven-bundle-plugin, bndtools) 在代码级别做了一些合理的假设)

Karaf 功能(请参阅发行版 ${KARAF_HOME} 中的 PDF 手册)可以大大缓解这种情况,但设置起来可能需要一些工作。有(至少)几种方法可以生成特征文件;

  1. 使用features-maven-plugin
  2. 使用 maven-build-helper 插件发布您手工制作的 XML 文件(很费力,但您可以使用资源过滤来维护版本)。
于 2012-05-03T18:49:50.723 回答