<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">
  
  
  <!-- GENERAL -->
  
  <!-- Version of the POM model is required for maven backward compatibility -->
  <modelVersion>4.0.0</modelVersion>
  <!-- Id of the group -->
  <groupId>org.kramerlab</groupId>
  <!-- name of the project -->
  <artifactId>autoencoder</artifactId>
  <!-- version of the project -->
  <version>0.1</version>
  <!-- Name of the project again...? -->
  <name>${project.artifactId}</name>
  <description>
    Implementation of an autoencoder consisting of multiple restricted
  Boltzmann machines</description>
  <inceptionYear>2013</inceptionYear>
  <url>https://github.com/kramerlab/ac</url>


  <scm>
    <connection>scm:git:https://github.com/kramerlab/autoencoder.git</connection>
    <developerConnection>scm:git:https://github.com/kramerlab/autoencoder.git</developerConnection>
    <url>https://github.com/kramerlab/autoencoder</url>
    <tag>HEAD</tag>
  </scm>
  
  
  <developers>
    <developer>
      <name>Joerg Wicker</name>
      <email>me@joerg-wicker.org</email>
      <url>https://joerg-wicker.org</url>
      <organization>Johannes Gutenberg University Mainz</organization>
      <organizationUrl>http://www.dm.informatik.uni-mainz.de</organizationUrl>
    </developer>
  </developers>

  
  <!-- LICENCES -->
  <licenses>
    <license>
      <name>The GNU General Public License, Version 3</name>
      <url>http://www.gnu.org/licenses/gpl-3.0.en.html</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <!-- REPOSITORIES -->
  <!-- needed to download the scalatest plugin (?) -->
  <pluginRepositories>
    
    <pluginRepository>
      <id>doesAnybodyCareAboutThisIdAtAll</id>
      <url>oss.sonatype.org/content/groups/public</url>
    </pluginRepository>
  </pluginRepositories>
  
  
  <!-- PROPERTIES -->
  
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- Don't use 1.7 with maven 2.x, it cannot parse some messages or something.
	 This sets the target JVM version for the used compiler. Notice that although
	 javac is the default compiler, this setting can be changed, so that we can
	 use other compilers (e.g. for AspectJ, C#, Scala).
    -->  
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <encoding>UTF-8</encoding>
    <scala.version>2.10.2</scala.version>
    <scalatest-artifact.version>2.10.0-RC3</scalatest-artifact.version>
    <scalatest.version>2.0.M5-B1</scalatest.version>
    <scalatest-plugin.version>1.0-M2</scalatest-plugin.version>
    <surefire-plugin.version>2.10</surefire-plugin.version>
  </properties>

  <!-- DEPENDENCIES -->
  
  <dependencies>
    <!-- Look at this link closely: 
	 http://mvnrepository.com/artifact/org.scala-lang/scala-library/2.10.0
	 It doesn't look the same way as the code generated by archetype. The 
	 version numbering is more detailed. The code generated by archetype just
	 used ${scala.version}, which is 2.10 instead of full specifier 2.10.0
	 
	 This dependency specifies that we require standard scala library to
	 compile our code. Makes sense.
    -->
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>

    <!-- Test -->
    <!-- ScalaTest unit tests can be executed with JUnit as runner, but I'm not
	 sure if it's required. In Daniel Gronau's blog guest entry I described 
	 how to get rid of the JUnit: it seemed important to me back then?
	 http://dgronau.wordpress.com/2011/10/09/scalatest-mit-maven/
    -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    
    <!-- don't need specs: 
	 http://www.youtube.com/watch?v=6pfdm-gIZus
	 "gut-wrenching, no thanks"
	 <dependency>
	 <groupId>org.specs2</groupId>
	 <artifactId>specs2_${scala.version}</artifactId>
	 <version>1.12.3</version>
	 <scope>test</scope>
	 </dependency>
    -->
    
    <!-- Copied from this pretty sophisticated looking complete POM-file, 
	 created by some experienced user:
	 https://scalatest-users.googlegroups.com/attach/afaab01480be8def/pom.xml?view=1&part=4
    -->
    <dependency>
      <groupId>org.scalatest</groupId>
      <artifactId>scalatest_${scalatest-artifact.version}</artifactId>
      <version>${scalatest.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-swing</artifactId>
      <version>2.10.2</version>
    </dependency>
    <!-- Copied from the central maven repository:
	 http://mvnrepository.com/artifact/org.scalatest/scalatest-maven-plugin/1.0-M2 
	 Why is it in dependencies? Isn't it a plugin? My code does not depend on
	 this, why is it here?
    -->
    <dependency>
      <groupId>org.scalatest</groupId>
      <artifactId>scalatest-maven-plugin</artifactId>
      <version>${scalatest-plugin.version}</version>
    </dependency>
    
    <!-- Plotting: JFreeChart -->
    <dependency>
      <groupId>jfree</groupId>
      <artifactId>jfreechart</artifactId>
      <version>1.0.13</version>
    </dependency>
    
    <dependency>
      <groupId>com.googlecode.efficient-java-matrix-library</groupId>
      <artifactId>ejml</artifactId>
      <version>0.22</version>
    </dependency>

    <dependency>
      <groupId>nz.ac.waikato.cms.weka</groupId>
      <artifactId>weka-dev</artifactId>
      <version>3.7.10</version>
    </dependency>
  </dependencies>

  <!-- BUILD -->
  
  <build>
    <sourceDirectory>src/main/scala</sourceDirectory>
    <testSourceDirectory>src/test/scala</testSourceDirectory>
    <plugins>
      <!-- scala maven plugin -->
      <plugin>
        <!-- [sic] see http://davidb.github.com/scala-maven-plugin [/sic]
	     See also http://davidb.github.com/scala-maven-plugin/usage.html
	-->
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>3.1.3</version>
        <executions>
          <execution>
	    <id>attach-javadocs</id>	    
            <goals>
	      <goal>doc-jar</goal>
              <goal>compile</goal>
              <goal>testCompile</goal>
            </goals>
            <configuration>
              <args>
                <arg>-make:transitive</arg>
                <arg>-dependencyfile</arg>
                <arg>${project.build.directory}/.scala_dependencies</arg>
              </args>
            </configuration>
          </execution>
        </executions>
	<configuration>
	  <reportPlugins>
            <plugin>
              <artifactId>maven-project-info-reports-plugin</artifactId>
              <version>2.2</version>
            </plugin>
            <plugin>
              <groupId>net.alchim31.maven</groupId>
              <artifactId>scala-maven-plugin</artifactId>
              <version>3.2.1</version>
              <configuration>
                <jvmArgs>
                  <jvmArg>-Xms64m</jvmArg>
                  <jvmArg>-Xmx1024m</jvmArg>
                </jvmArgs>
              </configuration>
            </plugin>
          </reportPlugins>
	  <scalaVersion>${scala.version}</scalaVersion>
	</configuration>
      </plugin>
      
      <!-- overriding default settings of the surefire plugin -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${surefire-plugin.version}</version>
        <configuration>
	  <skipTests>true</skipTests>
        </configuration>
      </plugin>
      
      <!-- scala test plugin -->
      <!-- All this was simply copied from the scalatest website: 
	   http://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin
	   (maven-scalatest-plugin <-> scalatest-maven-plugin seems to be a typo, 
	   awesome...)
      -->
      <plugin>
	<groupId>org.scalatest</groupId>
	<artifactId>scalatest-maven-plugin</artifactId>
	<version>${scalatest-plugin.version}</version>
	<configuration>
	  <reportsDirectory>
	    ${project.build.directory}/reports
	  </reportsDirectory>
	  <!-- <junitxml>.</junitxml> What's that for? -->
	  <!-- <filereports>WDF TestSuite.txt</filereports> What's that for?-->
	  <stdout>WD</stdout>
	</configuration>
	<executions>
	  <execution>
	    <id>test</id>
	    <goals>
	      <goal>test</goal>
	    </goals>
	  </execution>
	</executions>
      </plugin>
      
      <!-- This chunk of configuration has just been copied from here: 
	   https://www.assembla.com/wiki/show/scala-ide/With_Maven_CLI
	   it's for maven-eclipse integration -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.8</version>
        <!-- see http://maven.apache.org/plugins/
	     maven-eclipse-plugin/eclipse-mojo.html for more information -->
        <configuration>
          <downloadSources>true</downloadSources>
          <downloadJavadocs>true</downloadJavadocs>
          <projectnatures>
            <projectnature>
	      org.scala-ide.sdt.core.scalanature
	    </projectnature>
            <projectnature>
	      org.eclipse.jdt.core.javanature
	    </projectnature>
          </projectnatures>
          <buildcommands>
            <buildcommand>
	      org.scala-ide.sdt.core.scalabuilder
	    </buildcommand>
          </buildcommands>
          <classpathContainers>
            <classpathContainer>
	      org.scala-ide.sdt.launching.SCALA_CONTAINER"
	    </classpathContainer>
            <classpathContainer>
	      org.eclipse.jdt.launching.JRE_CONTAINER
	    </classpathContainer>
          </classpathContainers>
          <excludes>
            <exclude>org.scala-lang:scala-library</exclude>
            <exclude>org.scala-lang:scala-compiler</exclude>
          </excludes>
          <sourceIncludes>
            <sourceInclude>**/*.scala</sourceInclude>
            <sourceInclude>**/*.java</sourceInclude>
          </sourceIncludes>
        </configuration>
      </plugin>
      
      <!-- this is for packaging all dependencies into the jar -->
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
              <classpathPrefix>lib/</classpathPrefix>
              <mainClass>edu.tyukiand.App</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.8</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals><goal>copy-dependencies</goal></goals>
            <configuration>
              <outputDirectory>${project.build.directory}/lib</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
              <excludeTransitive>true</excludeTransitive>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals><goal>single</goal></goals>
          </execution>
        </executions>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
      
      <plugin>
	<groupId>org.sonatype.plugins</groupId>
	<artifactId>nexus-staging-maven-plugin</artifactId>
	<version>1.6.3</version>
	<extensions>true</extensions>
	<configuration>
	  <serverId>ossrh</serverId>
	  <nexusUrl>https://oss.sonatype.org/</nexusUrl>
	  <autoReleaseAfterClose>true</autoReleaseAfterClose>
	</configuration>
      </plugin>
      <plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-gpg-plugin</artifactId>
	<version>1.5</version>
	<executions>
          <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
              <goal>sign</goal>
            </goals>
          </execution>
	</executions>
      </plugin>
      <plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-source-plugin</artifactId>
	<version>2.2.1</version>
	<executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
	</executions>
      </plugin>
      <plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-javadoc-plugin</artifactId>
	<version>2.9.1</version>
	<executions>
          <execution>
            <id>attach-javadocs</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
	</executions>
      </plugin>
    </plugins>
  </build>
  
  
  <!-- REPORTING -->
  
  <reporting>
    <!-- This is basically copied from the page of scala-maven-plugin: 
	 http://davidb.github.com/scala-maven-plugin/plugin-info.html
	 We want to have scala doc, so we need this reporting stuff.
    -->
    <plugins>
      <plugin>
	<groupId>net.alchim31.maven</groupId>
	<artifactId>scala-maven-plugin</artifactId>
	<version>3.1.3</version>
      </plugin>
    </plugins>
  </reporting>
  
  
  <!-- PACKAGING -->
  
  <!-- how is it meant? How is this thing supposed to know how to package 
       jars from scala? 
  -->
  <packaging>jar</packaging>




  
  <distributionManagement>
    <snapshotRepository>
      <id>ossrh</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
      <id>ossrh</id>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
  </distributionManagement>


</project>