<?xml version="1.0"?>
<!--
     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.jlink</artifactId>
    <name>atomos.examples.jlink</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.atomos</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix.atomos.tests</groupId>
            <artifactId>org.apache.felix.atomos.tests.testbundles.service.contract</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix.atomos.tests</groupId>
            <artifactId>org.apache.felix.atomos.tests.testbundles.service.impl</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix.atomos.tests</groupId>
            <artifactId>org.apache.felix.atomos.tests.testbundles.service.impl.activator</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.scr</artifactId>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.promise</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.gogo.command</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.gogo.runtime</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.gogo.shell</artifactId>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <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>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.felix.atomos</groupId>
                    <artifactId>osgi.core</artifactId>
                    <version>8.0.1-SNAPSHOT</version>
                    <classifier>AtomosEquinox</classifier>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>felix</id>
            <dependencies>
                <dependency>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.framework</artifactId>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.felix.atomos</groupId>
                    <artifactId>osgi.core</artifactId>
                    <version>8.0.1-SNAPSHOT</version>
                    <classifier>AtomosFelix</classifier>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
    <build>
        <plugins>
            <plugin>
                <groupId>org.moditect</groupId>
                <artifactId>moditect-maven-plugin</artifactId>
                <version>1.0.0.RC1</version>
                <executions>
                    <execution>
                        <id>add-module-infos</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>add-module-info</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/modules</outputDirectory>
                            <modules>
                                <module>
                                    <artifact>
                                        <groupId>org.eclipse.platform</groupId>
                                        <artifactId>org.eclipse.osgi</artifactId>
                                    </artifact>
                                    <moduleInfoSource>
                                        open module org.eclipse.osgi {
                                        requires java.xml;

                                        exports org.apache.felix.resolver;
                                        exports org.apache.felix.resolver.util;
                                        exports org.eclipse.core.runtime.adaptor;
                                        exports
                                        org.eclipse.core.runtime.internal.adaptor;
                                        exports org.eclipse.equinox.log;
                                        exports org.eclipse.osgi.container;
                                        exports org.eclipse.osgi.container.builders;
                                        exports org.eclipse.osgi.container.namespaces;
                                        exports
                                        org.eclipse.osgi.framework.console;
                                        exports
                                        org.eclipse.osgi.framework.eventmgr;
                                        exports org.eclipse.osgi.framework.internal.reliablefile;
                                        exports org.eclipse.osgi.framework.log;
                                        exports
                                        org.eclipse.osgi.framework.util;
                                        exports org.eclipse.osgi.internal.cds;
                                        exports
                                        org.eclipse.osgi.internal.container;
                                        exports org.eclipse.osgi.internal.debug;
                                        exports org.eclipse.osgi.internal.framework;
                                        exports
                                        org.eclipse.osgi.internal.framework.legacy;
                                        exports org.eclipse.osgi.internal.hookregistry;
                                        exports
                                        org.eclipse.osgi.internal.hooks;
                                        exports org.eclipse.osgi.internal.loader;
                                        exports
                                        org.eclipse.osgi.internal.loader.buddy;
                                        exports
                                        org.eclipse.osgi.internal.loader.classpath;
                                        exports org.eclipse.osgi.internal.loader.sources;
                                        exports
                                        org.eclipse.osgi.internal.location;
                                        exports
                                        org.eclipse.osgi.internal.messages;
                                        exports
                                        org.eclipse.osgi.internal.permadmin;
                                        exports org.eclipse.osgi.internal.provisional.service.security;
                                        exports
                                        org.eclipse.osgi.internal.provisional.verifier;
                                        exports
                                        org.eclipse.osgi.internal.service.security;
                                        exports
                                        org.eclipse.osgi.internal.serviceregistry;
                                        exports org.eclipse.osgi.internal.signedcontent;
                                        exports
                                        org.eclipse.osgi.internal.url;
                                        exports
                                        org.eclipse.osgi.internal.util;
                                        exports org.eclipse.osgi.internal.weaving;
                                        exports
                                        org.eclipse.osgi.launch;
                                        exports org.eclipse.osgi.report.resolution;
                                        exports
                                        org.eclipse.osgi.service.datalocation;
                                        exports
                                        org.eclipse.osgi.service.debug;
                                        exports org.eclipse.osgi.service.environment;
                                        exports
                                        org.eclipse.osgi.service.localization;
                                        exports org.eclipse.osgi.service.pluginconversion;
                                        exports
                                        org.eclipse.osgi.service.resolver;
                                        exports org.eclipse.osgi.service.runnable;
                                        exports org.eclipse.osgi.service.security;
                                        exports org.eclipse.osgi.service.urlconversion;
                                        exports org.eclipse.osgi.signedcontent;
                                        exports
                                        org.eclipse.osgi.storage;
                                        exports org.eclipse.osgi.storage.bundlefile;
                                        exports org.eclipse.osgi.storage.url;
                                        exports
                                        org.eclipse.osgi.storage.url.bundleentry;
                                        exports
                                        org.eclipse.osgi.storage.url.bundleresource;
                                        exports
                                        org.eclipse.osgi.storage.url.reference;
                                        exports org.eclipse.osgi.storagemanager;
                                        exports org.eclipse.osgi.util;
                                        exports
                                        org.osgi.dto;
                                        exports org.osgi.framework;
                                        exports org.osgi.framework.connect;
                                        exports org.osgi.framework.dto;
                                        exports org.osgi.framework.hooks.bundle;
                                        exports org.osgi.framework.hooks.resolver;
                                        exports
                                        org.osgi.framework.hooks.service;
                                        exports
                                        org.osgi.framework.hooks.weaving;
                                        exports org.osgi.framework.launch;
                                        exports
                                        org.osgi.framework.namespace;
                                        exports org.osgi.framework.startlevel;
                                        exports
                                        org.osgi.framework.startlevel.dto;
                                        exports
                                        org.osgi.framework.wiring;
                                        exports org.osgi.framework.wiring.dto;
                                        exports org.osgi.resource;
                                        exports
                                        org.osgi.resource.dto;
                                        exports org.osgi.service.condpermadmin;
                                        exports
                                        org.osgi.service.log;
                                        exports
                                        org.osgi.service.log.admin;
                                        exports org.osgi.service.packageadmin;
                                        exports org.osgi.service.permissionadmin;
                                        exports
                                        org.osgi.service.resolver;
                                        exports org.osgi.service.startlevel;
                                        exports
                                        org.osgi.service.url;
                                        exports org.osgi.util.tracker;

                                        provides org.osgi.framework.launch.FrameworkFactory with org.eclipse.osgi.launch.EquinoxFactory;
                                        provides
                                        org.osgi.framework.connect.ConnectFrameworkFactory with
                                        org.eclipse.osgi.launch.EquinoxFactory;

                                        uses org.osgi.framework.connect.FrameworkUtilHelper;
                                        }
                                    </moduleInfoSource>
                                </module>
                                <module>
                                    <artifact>
                                        <groupId>org.apache.felix</groupId>
                                        <artifactId>org.apache.felix.framework</artifactId>
                                    </artifact>
                                    <moduleInfoSource>
                                        open module org.apache.felix.framework {
                                        requires jdk.unsupported;

                                        exports org.apache.felix.framework;
                                        exports org.apache.felix.framework.cache;
                                        exports
                                        org.apache.felix.framework.capabilityset;
                                        exports
                                        org.apache.felix.framework.ext;
                                        exports
                                        org.apache.felix.framework.resolver;
                                        exports org.apache.felix.framework.util;
                                        exports
                                        org.apache.felix.framework.util.manifestparser;
                                        exports
                                        org.apache.felix.framework.wiring;
                                        exports org.apache.felix.resolver;
                                        exports
                                        org.apache.felix.resolver.util;

                                        exports org.osgi.dto;
                                        exports org.osgi.framework;
                                        exports org.osgi.framework.connect;
                                        exports
                                        org.osgi.framework.dto;
                                        exports org.osgi.framework.hooks.bundle;
                                        exports
                                        org.osgi.framework.hooks.resolver;
                                        exports org.osgi.framework.hooks.service;
                                        exports
                                        org.osgi.framework.hooks.weaving;
                                        exports
                                        org.osgi.framework.launch;
                                        exports org.osgi.framework.namespace;
                                        exports
                                        org.osgi.framework.startlevel;
                                        exports
                                        org.osgi.framework.startlevel.dto;
                                        exports
                                        org.osgi.framework.wiring;
                                        exports
                                        org.osgi.framework.wiring.dto;
                                        exports org.osgi.resource;
                                        exports org.osgi.resource.dto;
                                        exports
                                        org.osgi.service.packageadmin;
                                        exports
                                        org.osgi.service.resolver;
                                        exports
                                        org.osgi.service.startlevel;
                                        exports
                                        org.osgi.service.url;
                                        exports org.osgi.util.tracker;

                                        provides org.osgi.framework.launch.FrameworkFactory with
                                        org.apache.felix.framework.FrameworkFactory;
                                        provides
                                        org.osgi.framework.connect.ConnectFrameworkFactory
                                        with org.apache.felix.framework.FrameworkFactory;

                                        uses org.apache.felix.framework.ext.ClassPathExtenderFactory;
                                        uses
                                        org.osgi.framework.connect.FrameworkUtilHelper;
                                        }
                                    </moduleInfoSource>
                                </module>
                                <module>
                                    <artifact>
                                        <groupId>org.osgi</groupId>
                                        <artifactId>osgi.promise</artifactId>
                                    </artifact>
                                    <moduleInfoSource>
                                        module osgi.promise {

                                        exports org.osgi.util.function;
                                        exports org.osgi.util.promise;
                                        }
                                    </moduleInfoSource>
                                </module>
                                <module>
                                    <artifact>
                                        <groupId>org.apache.felix</groupId>
                                        <artifactId>org.apache.felix.scr</artifactId>
                                    </artifact>
                                    <moduleInfoSource>
                                        module org.apache.felix.scr {
                                        requires java.logging;
                                        requires java.management;
                                        requires java.xml;
                                        requires transitive org.apache.felix.gogo.runtime;
                                        requires transitive osgi.core;
                                        requires transitive osgi.promise;

                                        exports org.apache.felix.scr.component;
                                        exports org.apache.felix.scr.info;
                                        exports org.osgi.service.component;
                                        exports org.osgi.service.component.runtime;
                                        exports org.osgi.service.component.runtime.dto;

                                        opens org.apache.felix.scr.impl;
                                        }
                                    </moduleInfoSource>
                                </module>
                                <module>
                                    <artifact>
                                        <groupId>org.apache.felix</groupId>
                                        <artifactId>org.apache.felix.gogo.command</artifactId>
                                    </artifact>
                                    <moduleInfoSource>
                                        module org.apache.felix.gogo.command {
                                        requires transitive org.apache.felix.gogo.runtime;
                                        requires transitive osgi.core;

                                        exports org.apache.felix.gogo.command;

                                        }
                                    </moduleInfoSource>
                                </module>
                                <module>
                                    <artifact>
                                        <groupId>org.apache.felix</groupId>
                                        <artifactId>org.apache.felix.gogo.runtime</artifactId>
                                    </artifact>
                                    <moduleInfoSource>
                                        module org.apache.felix.gogo.runtime {
                                        requires java.logging;

                                        requires transitive osgi.core;

                                        exports org.apache.felix.gogo.runtime;
                                        exports org.apache.felix.gogo.runtime.activator;
                                        exports
                                        org.apache.felix.gogo.runtime.threadio;
                                        exports org.apache.felix.service.command;
                                        exports org.apache.felix.service.threadio;

                                        }
                                    </moduleInfoSource>
                                </module>
                                <module>
                                    <artifact>
                                        <groupId>org.apache.felix</groupId>
                                        <artifactId>org.apache.felix.gogo.shell</artifactId>
                                    </artifact>
                                    <moduleInfoSource>
                                        module org.apache.felix.gogo.shell {
                                        requires transitive org.apache.felix.gogo.runtime;
                                        requires transitive osgi.core;

                                        exports org.apache.felix.gogo.options;
                                        exports
                                        org.apache.felix.gogo.shell;

                                        }
                                    </moduleInfoSource>
                                </module>
                            </modules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>create-runtime-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>create-runtime-image</goal>
                        </goals>
                        <configuration>
                            <ignoreSigningInformation>true</ignoreSigningInformation>
                            <modulePath>
                                <path>${project.build.directory}/modules</path>
                                <path>${project.build.directory}/${project.artifactId}-${project.version}.jar</path>
                            </modulePath>
                            <modules>
                                <module>osgi.core</module>
                                <module>org.apache.felix.atomos</module>
                                <module>org.apache.felix.gogo.command</module>
                                <module>org.apache.felix.gogo.runtime</module>
                                <module>org.apache.felix.gogo.shell</module>
                                <module>org.apache.felix.scr</module>
                                <module>osgi.promise</module>
                                <module>org.apache.felix.atomos.tests.testbundles.service.impl</module>
                                <module>org.apache.felix.atomos.tests.testbundles.service.impl.activator</module>
                                <module>org.apache.felix.atomos.examples.jlink</module>
                            </modules>


                            <launcher>
                                <name>atomos</name>
                                <module>org.apache.felix.atomos.examples.jlink/org.apache.felix.atomos.examples.jlink.GogoConsole</module>
                            </launcher>
                            <outputDirectory>
                                ${project.build.directory}/atomos
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/modules</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                            <excludeTransitive>true</excludeTransitive>
                            <includeArtifactIds>
                                osgi.core,
                                org.apache.felix.atomos,
                                org.apache.felix.atomos.tests.testbundles.service.contract,
                                org.apache.felix.atomos.tests.testbundles.service.impl,
                                org.apache.felix.atomos.tests.testbundles.service.impl.activator
                            </includeArtifactIds>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself. -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.moditect</groupId>
                                        <artifactId>moditect-maven-plugin</artifactId>
                                        <versionRange>${moditect-maven-plugin.version}</versionRange>
                                        <goals>
                                            <goal>add-module-info</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore />
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
