Hi Michael,

Using features-maven-plugin 2.2.5, you have to do something like

1. The define a filtered-resources folder in the resources containing the features.xml file:

<build>
  <resources>
    <resource>
      <directory>src/main/filtered-resources</directory>
      <filtered>true</filtered>
    </resource>
  </resources>
[...]

2. As the packaging is pom (<packaging>pom</packaging>), we need to execute the dependency plugin "explicitly":

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
      <execution>
        <id>filter</id>
        <phase>generate-resources</phase>
        <goals>
          <goal>resources</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

3. Now you can define the featuresFile in the create-kar goal on the process-resources phase:

  <plugin>
    <groupId>org.apache.karaf.tooling</groupId>
    <artifactId>features-maven-plugin</artifactId>
    <version>2.2.5</version>
    <executions>
      <execution>
        <id>create-kar</id>
        <phase>process-resources</phase>
        <goals>
          <goal>create-kar</goal>
        </goals>
        <configuration>

<featuresFile>${basedir}/target/classes/features.xml</featuresFile>
        </configuration>
      </execution>
    </executions>
  </plugin>

Regards
JB

On 01/12/2012 02:12 PM, Michael Täschner wrote:
Hi again,

I found more details for the karaf-maven-plugin in the doc and changed
the packaging to "kar". The feature.xml is now read from the
src/main/feature folder and contained only once in the output kar.
Unfortunately now a huge number of bundles are included which are
inherited from parent projects where I only wanted the bundles defined
in the input feature.xml. How can I disable the dependencies from being
included in the feature.xml ? I tried with
"includeTransitiveDependencies" = false but that does not help for
ignoring inherited dependencies.

Thanks and Regards,
Michael

Am 12. Januar 2012 11:44 schrieb Michael Täschner
<[email protected] <mailto:[email protected]>>:

    Hi David,

    sorry but I am still confused. I had a look at the 3.0.0
    users-guide/kar and it says to put the feature.xml into
    src/main/resources:

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

         <groupId>my.groupId</groupId>
         <artifactId>my-kar</artifactId>
         <version>1.0</version>
         <packaging>pom</packaging>

         <build>
             <plugins>
                 <plugin>
                     <groupId>org.apache.karaf.tooling</groupId>
                     <artifactId>karaf-maven-plugin</artifactId>
                     <version>3.0.0-SNAPSHOT</version>
                     <executions>
                         <execution>
                             <id>features-create-kar</id>
                             <goals>
                                 <goal>features-create-kar</goal>
                             </goals>
                             <configuration>
                                 
<featuresFile>src/main/resources/features.xml</featuresFile>
                             </configuration>
                         </execution>
                     </executions>
                 </plugin>
             </plugins>
         </build>

    </project>

    Can you give me an example with src/main/feature or how to use the
    plugin with dependencies as features ?

    Thanks and Regards,
    Michael


    2012/1/12 David Jencks <[email protected]
    <mailto:[email protected]>>

        Hi Michael,

        I'm still slightly confused because 3.0.0 does not have a
        feature-maven-plugin, it has a karaf-maven-plugin.

        Using the 3.0.0 karaf-maven-plugin, put your source feature.xml
        in src/main/feature/feature.xml, NOT
        src/main/resources/feature.xml.  It will get filtered before the
        feature generation from maven dependencies takes place.

        Use the kar packaging as explained in the 3.0.0 manual.

        Unless you need different start-levels for different bundles, or
        something like config information in the feature descriptor, you
        can have the plugin generate the entire feature.xml from maven
        dependencies.

        hope this helps
        david jencks


        On Jan 12, 2012, at 12:35 AM, Michael Täschner wrote:

        Hi again,

        sorry for any confusion, I hope to clarify my goals and
        approach. My goal is to generate kar archive for my
        multimodule project to deploy them at runtime as
        self-contained features. For this I set up a module for
        generating the kar from a filtered feature file to manage the
        version information of the project.

        I started using "archive-kar" goal of feature-maven-plugin of
        3.0.0.SNAPSHOT with the feature.xml residing in
        src/main/resources. As the feature.xml has to be filtered
        first, I refer to the filtered file as input for the plugin:
        
<featuresFile>${project.build.outputDirectory}/features.xml</featuresFile>

        JB recommended using "create-kar" goal of released karaf
        feature-maven-plugin (tried with 2.2.5) and the feature.xml in
        the same folder.

        The result is the same, that the final kar archive contains 2
        feature.xml files causing karaf to register 2 feature
        repositories, one for the file copied in from /target/classes
        and the other one from /repository/<groupid>/<artifactId> ...

        My question was then if one of them could be removed from the
        kar file to prevent duplicate feature repository entries.

        Feature file (example):
        <?xml version="1.0" encoding="UTF-8"?>
        <features name="${project.artifactId}-${project.version}"
        xmlns="http://karaf.apache.org/xmlns/features/v1.0.0";>
        <feature name='${project.artifactId}'
        version='${project.version}' >
        <bundle>mvn:${project.groupId}/common/${project.version}</bundle>
        <bundle>mvn:${project.groupId}/businessLogic/${project.version}</bundle>
        <bundle>mvn:${project.groupId}/webservice/${project.version}</bundle>
        </feature>
        </features>

        Thanks and Regards,
        Michael


        2012/1/11 David Jencks <[email protected]
        <mailto:[email protected]>>

            I can't tell what you are doing since your information is
            inconsistent.

            If you use the trunk (3.0.0-SNAPSHOT) karaf-maven-plugin
            and the kar packaging your "source" feature.xml file
            should be in src/main/feature/feature.xml.  AFAIK this
            works fine.

            I don't know anything about 2.2.x.

            david jencks

            On Jan 11, 2012, at 8:21 AM, Michael Täschner wrote:

            Hi JB,

            I switched to the create-kar goal of
            maven-features-plugin of karaf 2.2.5, yet the issues
            remain: If the input feature file uses properties I can
            only use the already filtered file in target/classes (I
            uses ${project.artifactId}, version, etc.) else the
            bundles cannot be resolved. Additionally the resulting
            kar still contains two feature files: the one from build
            path (target/classes) and the one within /repository,
            still resulting in two feature repositories being added
            in karaf ?

            Did I do something wrong ?

            Cheers,
            Michael

            2012/1/11 Jean-Baptiste Onofré <[email protected]
            <mailto:[email protected]>>

                Hi Michael,

                my comments inline:


                    1: I use the features-maven-plugin of karaf
                    3.0.0-SNAPSHOT to
                    "archive-kar" my feature from a filtered
                    features.xml file in
                    src/main/resources/feature. This works fine apart
                    from the fact that the
                    resulting kar contains two features.xml, one in
                    /features (as copied
                    from /target/classes/feature) and one in the
                    correct place under
                    /repository/<groupId>/<__artifactId>-features.xml. How
                    can I tell the
                    plugin to ignore the /target/feature/features.xml
                    in the kar while I
                    still need it for the build ? Right now karaf
                    shows two added feature
                    repositories for the same bundles and I have to
                    remove one manually.


                The create-kar goal is now available with
                features-maven-plugin 2.2.5.

                
http://karaf.apache.org/__manual/latest-2.2.x/users-__guide/kar.html
                
<http://karaf.apache.org/manual/latest-2.2.x/users-guide/kar.html>

                I blogged about it:
                
http://blog.nanthrax.net/2011/__12/do-you-know-the-apache-__karaf-maven-plugins/
                
<http://blog.nanthrax.net/2011/12/do-you-know-the-apache-karaf-maven-plugins/>

                The create-kar goal take the featuresFile, so it
                should include only this one, and you shouldn't use a
                resource for that.



                    2. Undeploy of kar from the karaf /deploy folder
                    has currently no
                    effect, neither the feature repo, nor the
                    features/bundles themselves
                    are undeployed ? Additionally I wonder what would
                    happen if I copy a
                    newer kar of my features to the /deploy folder ?!


                It's an expected behavior. Removing a kar file
                doesn't remove the features installed (and the
                bundles/config associated).
                On Karaf 2.2.x, the kar is uncompress in the
                local-repo folder, adding a .timestamp.
                If you copy a new KAR, the KarDeployer will check if
                the kar is newer than the previous .timestamp and so
                it will try to update the features/bundles. Else,
                nothing will be performed.

                Regards
                JB



                    I am grateful for any answer and look forward to
                    hearing from you.

                    Kind Regards,
                    Michael


                --
                Jean-Baptiste Onofré
                [email protected] <mailto:[email protected]>
                http://blog.nanthrax.net <http://blog.nanthrax.net/>
                Talend - http://www.talend.com <http://www.talend.com/>








--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply via email to