<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.felix.atomos.examples</groupId>
        <artifactId>org.apache.felix.atomos.examples</artifactId>
        <version>0.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>

    <repositories>
        <repository>
            <id>atomos-temp-m2repo</id>
            <url>https://github.com/tjwatson/atomos-temp-m2repo/raw/master/repository</url>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.atomos.runtime</artifactId>
            <version>${atomos.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix.atomos.tests</groupId>
            <artifactId>org.apache.felix.atomos.tests.testbundles.service.contract</artifactId>
            <version>${atomos.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix.atomos.tests</groupId>
            <artifactId>org.apache.felix.atomos.tests.testbundles.service.impl</artifactId>
            <version>${atomos.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix.atomos.tests</groupId>
            <artifactId>org.apache.felix.atomos.tests.testbundles.service.impl.activator</artifactId>
            <version>${atomos.version}</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>equinox</id>
            <dependencies>
                <dependency>
                    <groupId>org.eclipse.platform</groupId>
                    <artifactId>org.eclipse.osgi</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.felix.atomos.osgi.frameworks.equinox</groupId>
                    <artifactId>atomos.osgi.framework</artifactId>
                    <version>${atomos.version}</version>
                </dependency>
            </dependencies>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>felix</id>
            <properties>
                <buildWithFelix>true</buildWithFelix>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.framework.connect</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.felix.atomos.osgi.frameworks.felix</groupId>
                    <artifactId>atomos.osgi.framework</artifactId>
                    <version>${atomos.version}</version>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
    <build>
        <plugins>
            <plugin>
                <groupId>org.moditect</groupId>
                <artifactId>moditect-maven-plugin</artifactId>
                <version>1.0.0.Beta2</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.connect</artifactId>
                                    </artifact>
                                    <moduleInfoSource>
                                        open module org.apache.felix.framework.connect {
                                        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 transitive org.apache.felix.gogo.runtime;
                                        requires transitive atomos.osgi.framework;
                                        requires transitive
                                        osgi.promise;

                                        exports
                                        org.apache.felix.scr.component;
                                        exports org.apache.felix.scr.impl;
                                        exports org.apache.felix.scr.impl.config;
                                        exports org.apache.felix.scr.impl.helper;
                                        exports org.apache.felix.scr.impl.inject;
                                        exports
                                        org.apache.felix.scr.impl.inject.field;
                                        exports org.apache.felix.scr.impl.inject.methods;
                                        exports org.apache.felix.scr.impl.logger;
                                        exports org.apache.felix.scr.impl.manager;
                                        exports
                                        org.apache.felix.scr.impl.metadata;
                                        exports
                                        org.apache.felix.scr.impl.parser;
                                        exports org.apache.felix.scr.impl.runtime;
                                        exports org.apache.felix.scr.impl.xml;
                                        exports org.apache.felix.scr.info;
                                        exports org.kxml2.io;
                                        exports org.osgi.service.component;
                                        exports
                                        org.osgi.service.component.runtime;
                                        exports org.osgi.service.component.runtime.dto;
                                        exports org.xmlpull.v1;

                                        }
                                    </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 atomos.osgi.framework;

                                        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 atomos.osgi.framework;

                                        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 atomos.osgi.framework;

                                        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>atomos.osgi.framework</module>
                                <module>org.apache.felix.atomos.runtime</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>
                                atomos.osgi.framework,
                                org.apache.felix.atomos.runtime,
                                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></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
