Question

I have been trying to use querydsl in a project which is an osgi bundle. my pom.xml has the following dependencies:

    <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>

As well as the plugin

        <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>

Still when I try to start the bundle I get:

 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)))

I was using an older version of querydsl but apparently they fixed some stuff about osgi recently so I upgraded. The problem persists.

What I am missing for querydsl to work inside osgi?

Was it helpful?

Solution

Installing each dependency by hand will be a pain, but AFAIK there's nothing that will take a maven artifact and chain back of all dependencies - this would fail as where would it stop?

You could end up with every version of every logging framework (even if you had pax-logging installed), or the wrong implementation.

Alas in maven's case there's currently no way of applying semantic versioning or higher level requirement and capability. (Though BND (maven-bundle-plugin, bndtools) makes some sensible assumptions at a code level)

Karaf features (see the PDF manual in distribution's ${KARAF_HOME}) can do a lot to alleviate this but it can take some work to setup. There's a(t least) couple of ways to generate features files;

  1. Use the features-maven-plugin
  2. Use the maven-build-helper plugin to publish an XML file that you handcraft (laborious but you can maintain versions using resource filtering).
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top