【问题标题】:using QueryDSL in osgi在 osgi 中使用 QueryDSL
【发布时间】:2012-05-02 12:02:18
【问题描述】:

我一直在尝试在一个 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,但显然他们最近修复了一些 stuff about osgi,所以我升级了。问题仍然存在。

querydsl 在 osgi 中工作时缺少什么?

【问题讨论】:

  • querydsl-jpa 包有很多依赖项(直接的和暂时的),我假设您已经加载了所有这些并且 querydsl-jpa 包已经启动?
  • 没有。你说的对。我是 osgi 的新手,我假设在 karaf 控制台中执行 osgi:instal mvn..... 我会解决所有依赖项。显然不是

标签: osgi querydsl


【解决方案1】:

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

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

唉,在 maven 的情况下,目前无法应用 semantic versioning 或更高级别的 requirement and capability。 (虽然 BND (maven-bundle-plugin, bndtools) 在代码层面做了一些合理的假设)

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

  1. 使用features-maven-plugin
  2. 使用 maven-build-helper 插件发布您手工制作的 XML 文件(这很费力,但您可以使用资源过滤来维护版本)。

【讨论】:

  • features-maven-plugin generate-features-xml 非常有用。它并没有完全解决我的问题,但至少花了我一半的时间。谢谢
  • 我认为大多数人都处于相同的位置,幸运的是 OSGi 联盟正在努力解决这个问题。很高兴它有帮助 =)
猜你喜欢
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2011-01-23
  • 2014-02-15
  • 2017-12-31
  • 1970-01-01
相关资源
最近更新 更多