<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<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">
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>21</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.apache.geronimo.arthur.integrationtests</groupId>
  <artifactId>scr</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <name>Arthur :: Integration Tests :: SCR</name>
  <packaging>bundle</packaging>

  <dependencies>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>osgi.core</artifactId>
      <version>7.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>osgi.cmpn</artifactId>
      <version>7.0.0</version>
    </dependency>

    <!-- we just reuse the programming model and run it as a standalone app -->
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.scr</artifactId>
      <version>2.1.16</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.winegrower</groupId>
      <artifactId>winegrower-core</artifactId>
      <version>${winegrower.version}</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <configuration>
          <source>${maven.compiler.source}</source>
          <target>${maven.compiler.target}</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>4.2.1</version>
        <extensions>true</extensions>
        <executions>
          <execution>
            <id>manifest</id>
            <phase>process-classes</phase>
            <goals>
              <goal>bundle</goal>
            </goals>
            <configuration>
              <exportScr>true</exportScr>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <!-- our extension does it
      <plugin>
        <groupId>org.apache.winegrower</groupId>
        <artifactId>winegrower-maven-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <executions>
          <execution>
            <id>metadata</id>
            <phase>process-classes</phase>
            <goals>
              <goal>metadata</goal>
            </goals>
            <configuration>
              <autoFiltering>true</autoFiltering>
              <excludeArtifacts> we just keep felix.scr + our module (using scr)
                <excludeArtifact>xbean-finder-shaded</excludeArtifact>
              </excludeArtifacts>
            </configuration>
          </execution>
        </executions>
      </plugin>
      -->
      <plugin>
        <groupId>org.apache.geronimo.arthur</groupId>
        <artifactId>arthur-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <main>org.apache.geronimo.arthur.integrationtests.ScrMain</main>
          <graalExtensions>
            <graalExtension>winegrower</graalExtension>
          </graalExtensions>
          <!-- previous extension replaces all that configuration + winegrower mojo
          <resources>
            <resource>
              <pattern>OSGI-INF/.*\.xml</pattern>
            </resource>
            <resource>
              <pattern>WINEGROWER-INF/manifests.properties</pattern>
            </resource>
            <resource>
              <pattern>WINEGROWER-INF/index.properties</pattern>
            </resource>
          </resources>
          <reflections>
            <reflection>
              <name>org.apache.felix.scr.impl.Activator</name>
              <allPublicConstructors>true</allPublicConstructors>
            </reflection>
            <reflection>
              <name>org.apache.geronimo.arthur.integrationtests.Application</name>
              <allPublicConstructors>true</allPublicConstructors>
              <allPublicMethods>true</allPublicMethods>
            </reflection>
          </reflections>
          -->
          <!-- avoid to conflict with host cache since we mount the local m2 to speed up the execution -->
          <graalCacheGav>org.apache.geronimo.arthur.cache:graal-integrationtests</graalCacheGav>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
