<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>10</version>
  </parent>
  <groupId>org.apache.joshua</groupId>
  <artifactId>joshua-parent</artifactId>
  <packaging>pom</packaging>
  <version>6.1-SNAPSHOT</version>
  <name>Apache Joshua Machine Translation Toolkit - Parent</name>
  <description>Joshua is an open-source statistical machine
  translation decoder for phrase-based, hierarchical,
  and syntax-based machine translation, written in Java.
  </description>
  <url>http://joshua.incubator.apache.org</url>
  <inceptionYear>2016</inceptionYear>

  <properties>
    <slf4j.version>1.7.21</slf4j.version>
    <findbugs.version>3.0.4</findbugs.version>
  </properties>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>

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

  <developers>
    <developer>
      <id>lewismc</id>
      <name>Lewis John McGibbney</name>
      <email>lewismc [at] apache [dot] org</email>
      <roles>
        <role>Committer</role>
        <role>PMC Member</role>
      </roles>
    </developer>
    <developer>
      <id>mjpost</id>
      <name>Matt Post</name>
      <email>post [at] cs [dot] jhu [dot] edu</email>
      <roles>
        <role>Committer</role>
        <role>PMC Member</role>
      </roles>
    </developer>
  </developers>

  <mailingLists>
    <mailingList>
      <name>Dev Mailing List</name>
      <post>dev[at]joshua[dot]incubator[dot]apache[dot]org</post>
      <subscribe>dev-subscribe[at]joshua[dot]incubator[dot]apache[dot]org</subscribe>
      <unsubscribe>dev-unsubscribe[at]joshua[dot]incubator[dot]apache[dot]org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/incubator-joshua-dev/</archive>
    </mailingList>

    <mailingList>
      <name>User Mailing List</name>
      <post>user[at]joshua[dot]incubator[dot]apache[dot]org</post>
      <subscribe>user-subscribe[at]joshua[dot]incubator[dot]apache[dot]org</subscribe>
      <unsubscribe>user-unsubscribe[at]joshua[dot]incubator[dot]apache[dot]org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/incubator-joshua-user/</archive>
    </mailingList>

    <mailingList>
      <name>Commits Mailing List</name>
      <post>commits[at]joshua[dot]incubator[dot]apache[dot]org</post>
      <subscribe>commits-subscribe[at]joshua[dot]incubator[dot]apache[dot]org</subscribe>
      <unsubscribe>commits-unsubscribe[at]joshua[dot]incubator[dot]apache[dot]org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/incubator-joshua-commits/</archive>
    </mailingList>
  </mailingLists>

  <scm>
    <connection>scm:git:http://git-wip-us.apache.org/repos/asf/incubator-joshua.git</connection>
    <developerConnection>scm:git:http://git-wip-us.apache.org/repos/asf/incubator-joshua.git</developerConnection>
    <url>https://git-wip-us.apache.org/repos/asf/incubator-joshua.git</url>
    <tag>HEAD</tag>
  </scm>
  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/JOSHUA</url>
  </issueManagement>
  <ciManagement>
    <system>Jenkins</system>
    <url>https://builds.apache.org/job/joshua_master/</url>
  </ciManagement>

  <modules>
    <module>joshua-core</module>
    <module>joshua-web</module>
  </modules>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.9.10</version>
    </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <defaultGoal>install</defaultGoal>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <executions>
            <execution>
              <phase>test</phase>
              <goals>
                <goal>check</goal>
              </goals>
              <configuration>
                <includes>
                  <include>src/main/java</include>
                  <include>src/main/resources</include>
                  <include>src/test/java</include>
                  <include>pom.xml</include>
                </includes>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
	      <artifactId>maven-eclipse-plugin</artifactId>
	      <version>2.10</version>
	      <configuration>
          <workspace>${basedir}</workspace>
          <workspaceCodeStylesURL>${basedir}/eclipse-codeformat.xml</workspaceCodeStylesURL>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
