<!--
     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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.felix.atomos.examples</groupId>
        <artifactId>org.apache.felix.atomos.examples</artifactId>
        <version>1.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>org.apache.felix.atomos.examples.substrate.maven</artifactId>
    <name>atomos.examples.substrate.maven</name>

    <profiles>
        <profile>
            <id>default-compile</id>
            <dependencies>
                <dependency>
                   <groupId>org.osgi</groupId>
                    <artifactId>osgi.core</artifactId>
                </dependency>
            </dependencies>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>equinox</id>
            <dependencies>
                <dependency>
                    <groupId>org.eclipse.platform</groupId>
                    <artifactId>org.eclipse.osgi</artifactId>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>felix</id>
            <dependencies>
                <dependency>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.framework</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.log</artifactId>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
    <dependencies>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.atomos</artifactId>
            <version>1.0.1-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.felix.atomos.tests</groupId>
            <artifactId>org.apache.felix.atomos.tests.testbundles.bom</artifactId>
            <version>1.0.1-SNAPSHOT</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.apache.felix.atomos.examples</groupId>
            <artifactId>org.apache.felix.atomos.examples.webconsole.bom</artifactId>
            <version>1.0.1-SNAPSHOT</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>atomos-maven-plugin</artifactId>
                <version>0.9.1-SNAPSHOT</version>
                <configuration>
                    <nativeImage>
                        <debug>true</debug>
                        <additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>org.apache.felix.atomos</additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>javax.servlet</additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>org.apache.felix.service.command.Converter</additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>org.eclipse.jetty.util.TypeUtil</additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>org.eclipse.jetty.http.HttpTokens</additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>org.eclipse.jetty.util.log.Log</additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>org.eclipse.jetty.util.log.StdErrLog</additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>org.eclipse.jetty.util.Uptime</additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>org.eclipse.jetty.server.HttpOutput</additionalInitializeAtBuildTime>
                            <additionalInitializeAtBuildTime>org.eclipse.jetty.util.ModuleLocation</additionalInitializeAtBuildTime>
                        </additionalInitializeAtBuildTime>
                        <resourceConfigurationFiles>
                            <resourceConfigurationFile>additionalResourceConfig.json</resourceConfigurationFile>
                        </resourceConfigurationFiles>
                        <dynamicProxyConfigurationFiles>
                            <dynamicProxyConfigurationFile>proxy_config.json</dynamicProxyConfigurationFile>
                        </dynamicProxyConfigurationFiles>

                        <reflectionConfigurationFiles>
                            <reflectionConfigurationFile>reflectConfig_felix_atomos.json</reflectionConfigurationFile>
                            <reflectionConfigurationFile>reflectConfig_felix_gogo.json</reflectionConfigurationFile>
                            <reflectionConfigurationFile>reflectConfig_felix_web.json</reflectionConfigurationFile>
                            <reflectionConfigurationFile>reflectConfig_jdk.json</reflectionConfigurationFile>
                            <reflectionConfigurationFile>reflectConfig_jetty.json</reflectionConfigurationFile>
                        </reflectionConfigurationFiles>
                        <!-- <mainClass>org.apache.felix.atomos.Atomos</mainClass> -->
                    </nativeImage>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>atomos-native-image</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
