<?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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.marmotta</groupId>
        <artifactId>marmotta-parent</artifactId>
        <version>3.0.1</version>
        <relativePath>parent</relativePath>
    </parent>

    <artifactId>marmotta-reactor</artifactId>
    <packaging>pom</packaging>

    <name>Apache Marmotta</name>
    <description>Open implementation of the Linked Data Platform</description>
    <url>http://marmotta.apache.org</url>

    <prerequisites>
        <maven>3.0.3</maven>
    </prerequisites>

    <inceptionYear>2012</inceptionYear>
    <licenses>
        <license>
            <name>Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0</url>
            <distribution>repo</distribution>
            <comments>A business-friendly OSS license</comments>
        </license>
    </licenses>

    <developers>
        <developer>
            <id>andy</id>
            <name>Andy Seaborne</name>
            <email>andy@apache.org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <id>dglachs</id>
            <name>Dietmar Glachs</name>
            <email>dglachs@apache.org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <id>fchrist</id>
            <name>Fabian Christ</name>
            <email>fchrist@apache.org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <id>jakob</id>
            <name>Jakob Frank</name>
            <email>jakob@apache.org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <id>nandana</id>
            <name>Nandana Mihindukulasooriya</name>
            <email>nandana@apache.org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <id>rwesten</id>
            <name>Rupert Westenthaler</name>
            <email>rwesten@apache.org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <id>sschaffert</id>
            <name>Sebastian Schaffert</name>
            <email>sschaffert@apache.org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <id>wikier</id>
            <name>Sergio Fernández</name>
            <email>wikier@apache.org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <id>tkurz</id>
            <name>Thomas Kurz </name>
            <email>tkurz@apache.org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
    </developers>

    <organization>
        <name>The Apache Software Foundation</name>
        <url>http://www.apache.org</url>
    </organization>

    <scm>
        <url>https://git-wip-us.apache.org/repos/asf/marmotta.git</url>
        <connection>scm:git:https://git-wip-us.apache.org/repos/asf/marmotta.git</connection>
        <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/marmotta.git</developerConnection>
      <tag>3.0.1</tag>
  </scm>

    <issueManagement>
        <system>Jira</system>
        <url>http://issues.apache.org/jira/browse/MARMOTTA</url>
    </issueManagement>

    <mailingLists>
        <mailingList>
            <name>users</name>
            <post>users@marmotta.apache.org</post>
            <subscribe>users-subscribe@marmotta.apache.org</subscribe>
            <unsubscribe>users-unsubscribe@marmotta.apache.org</unsubscribe>
            <archive>http://mail-archives.apache.org/mod_mbox/marmotta-users/</archive>
            <otherArchives>
                <otherArchive>http://markmail.org/search/?q=list%3Aorg.apache.marmotta.users</otherArchive>
            </otherArchives>
        </mailingList>
        <mailingList>
            <name>dev</name>
            <post>dev@marmotta.apache.org</post>
            <subscribe>dev-subscribe@marmotta.apache.org</subscribe>
            <unsubscribe>dev-unsubscribe@marmotta.apache.org</unsubscribe>
            <archive>http://mail-archives.apache.org/mod_mbox/marmotta-dev/</archive>
            <otherArchives>
                <otherArchive>http://markmail.org/search/?q=list%3Aorg.apache.marmotta.dev</otherArchive>
            </otherArchives>
        </mailingList>
        <mailingList>
            <name>commits</name>
            <post>commits@marmotta.apache.org</post>
            <subscribe>commits-subscribe@marmotta.apache.org</subscribe>
            <unsubscribe>commits-unsubscribe@marmotta.apache.org</unsubscribe>
            <archive>http://mail-archives.apache.org/mod_mbox/marmotta-commits/</archive>
            <otherArchives>
                <otherArchive>http://markmail.org/search/?q=list%3Aorg.apache.marmotta.commits</otherArchive>
            </otherArchives>
        </mailingList>
    </mailingLists>

    <!-- release management -->
    <build>
        <plugins>
            <!-- do not install / deploy reactor -->
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <useReleaseProfile>false</useReleaseProfile>
                    <goals>deploy</goals>

                    <!-- don't ask for every submodule -->
                    <autoVersionSubmodules>true</autoVersionSubmodules>

                    <!-- do not fetch over the Internet the whole repository -->
                    <localCheckout>true</localCheckout>

                    <!-- the name of the tag of a release in GIT -->
                    <tagNameFormat>@{version}</tagNameFormat>

                    <!-- the profiles to run for the release -->
                    <arguments>-Pinstaller,marmotta-release,sign ${arguments}</arguments>

		    <pushChanges>false</pushChanges>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <!-- modified Apache Release profile (copied and modified from Apache Jackrabbit) -->
        <profile>
            <id>marmotta-release</id>
            <properties>
                <username>${user.name}</username>
                <keyfile>${user.home}/.ssh/id_rsa</keyfile>
                <passphrase />
            </properties>
            <build>
                <plugins>
                    <!-- ensure that all license headers are present -->
                    <plugin>
                        <groupId>org.apache.rat</groupId>
                        <artifactId>apache-rat-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>check</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- sign artifacts on release -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                                <configuration>
                                    <excludes>
                                        <exclude>**/*.asc</exclude>
                                        <exclude>**/*.md5</exclude>
                                        <exclude>**/*.sha1</exclude>
                                    </excludes>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- attach sources and javadocs to deploy on release -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- assemble the project source artifacts -->
                    <plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <phase>package</phase>
                                <configuration>
                                    <descriptors>
                                        <descriptor>assembly.xml</descriptor>
                                    </descriptors>
                                    <finalName>apache-marmotta-${project.version}</finalName>
                                    <tarLongFileMode>gnu</tarLongFileMode>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- JCR-2455: Automatic staging of non-Maven release artifacts -->
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>default-cli</id>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <phase>deploy</phase>
                                <configuration>
                                    <tasks>
                                        <mkdir dir="${basedir}/target/${project.version}" />
                                        <copy todir="${basedir}/target/${project.version}" flatten="true">
                                            <fileset dir="${basedir}">
                                                <include name="KEYS" />
                                                <include name="target/*-src.zip*" />
                                                <include name="launchers/marmotta-webapp/target/*-webapp.zip*" />
                                                <include name="launchers/marmotta-installer/target/*-installer.zip*" />
                                                <include name="libraries/ldpath/ldpath-backend-linkeddata/target/*-ldpath.zip*" />

                                                <include name="target/*-src.tar.gz*" />
                                                <include name="launchers/marmotta-webapp/target/*-webapp.tar.gz*" />
                                                <include name="launchers/marmotta-installer/target/*-installer.tar.gz*" />
                                                <include name="libraries/ldpath/ldpath-backend-linkeddata/target/*-ldpath.tar.gz*" />
                                                <exclude name="*.asc.asc" />
                                            </fileset>
                                        </copy>
                                        <checksum algorithm="MD5" fileext=".md5">
                                            <fileset dir="${basedir}/target/${project.version}">
                                                <include name="*.zip" />
                                                <include name="*.tar.gz" />
                                            </fileset>
                                        </checksum>
                                        <checksum algorithm="SHA1" fileext=".sha1">
                                            <fileset dir="${basedir}/target/${project.version}">
                                                <include name="*.zip" />
                                                <include name="*.tar.gz" />
                                            </fileset>
                                        </checksum>
                                        <checksum file="${basedir}/target/${project.version}/apache-marmotta-${project.version}-installer.zip" algorithm="SHA1" property="checksum.installer.zip" />
                                        <checksum file="${basedir}/target/${project.version}/apache-marmotta-${project.version}-installer.tar.gz" algorithm="SHA1" property="checksum.installer.tgz" />
                                        <checksum file="${basedir}/target/${project.version}/apache-marmotta-${project.version}-ldpath.zip" algorithm="SHA1" property="checksum.ldpath.zip" />
                                        <checksum file="${basedir}/target/${project.version}/apache-marmotta-${project.version}-ldpath.tar.gz" algorithm="SHA1" property="checksum.ldpath.tgz" />
                                        <checksum file="${basedir}/target/${project.version}/apache-marmotta-${project.version}-src.zip" algorithm="SHA1" property="checksum.src.zip" />
                                        <checksum file="${basedir}/target/${project.version}/apache-marmotta-${project.version}-src.tar.gz" algorithm="SHA1" property="checksum.src.tgz" />
                                        <checksum file="${basedir}/target/${project.version}/apache-marmotta-${project.version}-webapp.zip" algorithm="SHA1" property="checksum.webapp.zip" />
                                        <checksum file="${basedir}/target/${project.version}/apache-marmotta-${project.version}-webapp.tar.gz" algorithm="SHA1" property="checksum.webapp.tgz" />
                                        <echo file="${basedir}/target/vote.txt">
From: ${username}@apache.org
To: dev@marmotta.apache.org
Subject: [VOTE] Release Apache Marmotta ${project.version}

A candidate for the Marmotta ${project.version} release is available at:

https://dist.apache.org/repos/dist/dev/marmotta/${project.version}/

The release candidate is based on the sources tagged with ${project.version} in:

https://git-wip-us.apache.org/repos/asf/marmotta.git

The release candidate consists of the following source distribution archives:
- apache-marmotta-${project.version}-src.[zip|tar.gz]
  SHA1 of ZIP: ${checksum.src.zip}
  SHA1 of TGZ: ${checksum.src.tgz}

In addition, the following supplementary binary distributions are provided:
- apache-marmotta-${project.version}-installer.[zip|tar.gz]
  SHA1 of ZIP: ${checksum.installer.zip}
  SHA1 of TGZ: ${checksum.installer.tgz}
- apache-marmotta-${project.version}-ldpath.[zip|tar.gz]
  SHA1 of ZIP: ${checksum.ldpath.zip}
  SHA1 of TGZ: ${checksum.ldpath.tgz}
- apache-marmotta-${project.version}-webapp.[zip|tar.gz]
  SHA1 of ZIP: ${checksum.webapp.zip}
  SHA1 of TGZ: ${checksum.webapp.tgz}

A staged Maven repository is available for review at:

https://repository.apache.org/

Please vote on releasing this package as Apache Marmotta ${project.version}.
The vote is open for the next 72 hours and passes if a majority of at
least three +1 Marmotta PMC votes are cast.

[ ] +1 Release this package as Apache Marmotta ${project.version}
[ ]  0 I don't feel strongly about it, but I'm okay with the release
[ ] -1 Do not release this package because...${line.separator}
                                        </echo>
                                        <echo />
                                        <echo>
The release candidate has been prepared in:

${basedir}/target/${project.version}

Please deploy it to https://dist.apache.org/repos/dist/dev/marmotta/:

cd /path/to/marmotta-dev
mv ${basedir}/target/${project.version} ${project.version}
svn add ${project.version}
svn commit -m 'Apache Marmotta ${project.version} release candidate' ${project.version}

A release vote template has been generated for you:

file://${basedir}/target/vote.txt
                                        </echo>
                                        <echo />
                                    </tasks>
                                </configuration>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>org.apache.ant</groupId>
                                <artifactId>ant-nodeps</artifactId>
                                <version>1.8.1</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <modules>
        <module>parent</module>
        <module>build</module>
        <module>client</module>
        <module>commons</module>
        <module>extras</module>
        <module>launchers</module>
        <module>libraries</module>
        <module>platform</module>
    </modules>

</project>
