mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
25.08.2013 d5405bbfef235a096147dbea84a909f97be6facb
Use Maven to build OpenDJ server


Trying to bring opendj server the most possible under maven.
Here maven-antrun-plugin is only used to generate the java files from our resources.
I am sure there are many glitches that need to be fixed in this file. We'll fix them over time. It is not ready to be used as prime build system yet. For example, no tests are run yet, or several resources are missing (.properties files, other??).
My goal is to bring opendj server under Sonar in order to see code coverage data.
Use "mvn -f pom-maven.xml clean install" to compile.

build.xml:
Renamed compileadmin target to generateadmin.mvn -f pom-maven.xml clean install
Added generatesources target depending on dynamicconstants, generatemessages and generateadmin.
In generateadmin target, pass down admin.src.dir property to generateadminsubtask.

pom-maven.xml: ADDED
Inspired from pom.xml.
1 files added
1 files modified
307 ■■■■■ changed files
opends/build.xml 23 ●●●●● patch | view | raw | blame | history
opends/pom-maven.xml 284 ●●●●● patch | view | raw | blame | history
opends/build.xml
@@ -707,15 +707,18 @@
  <!-- Compile the Directory Server source files. -->
  <target name="cleancompile"
       depends="cleaninit,compilequicksetup"
       description="Recompile the Directory Server source files.">
  </target>
  <!-- Compile the Directory Server source files. -->
  <target name="generatesources"
       depends="dynamicconstants,generatemessages,generateadmin"
       description="Generate all the sources.">
  </target>
  <target name="compile"
       depends="init,checkjavaversion,dynamicconstants,generatemessages,compileadmin,resolve"
       depends="init,checkjavaversion,generatesources,resolve"
       description="Compile the Directory Server source files.">
    <mkdir dir="${classes.dir}" />
    <mkdir dir="${build.lib.dir}" />
@@ -866,7 +869,7 @@
    <delete file="${package.dir}/lib/quicksetup.jar" />
    <!-- Regenerate configuration files if necessary -->
    <antcall target="compileadmin" />
    <antcall target="generateadmin" />
    <!-- Recreate the classes directory and recompile into it. -->
    <mkdir dir="${classes.dir}" />
@@ -1434,7 +1437,7 @@
  <!-- Generate JavaDoc documentation from the source files -->
  <target name="javadoc" depends="dsml,compileadmin"
  <target name="javadoc" depends="dsml,generateadmin"
       description="Generate JavaDoc documentation.">
    <mkdir dir="${javadoc.dir}" />
@@ -2284,10 +2287,9 @@
  <!-- Code generation for core administration components. -->
  <target name="compileadmin" depends="validateadmin" description="Code generation for configuration Object.">
  <target name="generateadmin" depends="validateadmin" description="Code generation for configuration Object.">
    <!-- The XSLT task creates a lot of noise.
         I can't find any other way to shut it up. -->
    <condition property="antcmd" value="ant.bat">
      <os family="windows" />
    </condition>
@@ -2302,8 +2304,9 @@
      <arg value="-buildfile" />
      <arg value="${ant.file}" />
      <arg value="-Dbuild.dir=${build.dir}" />
      <arg value="-Dadmin.src.dir=${admin.src.dir}" />
      <arg value="-quiet" />
      <arg value="compileadminsubtask" />
      <arg value="generateadminsubtask" />
      <env key="ANT_OPTS" value="-Xmx${MEM}" />
      <!-- Set classpath to workaround Apple JDK Xalan conflict -->
      <env key="CLASSPATH" value="${ext.dir}/xalan-j/xalan.jar" />
@@ -2312,7 +2315,7 @@
  <target name="compileadminsubtask">
  <target name="generateadminsubtask">
    <!-- Xalan-J Class Path : refer to it explicitly from each XSLT task. -->
    <path id="xalan.class.path">
      <fileset dir="${ext.dir}/xalan-j">
@@ -2427,7 +2430,7 @@
  </target>
  <!-- Generate a src.zip file containing all the server source. -->
  <target name="srczip" depends="compileadmin"
  <target name="srczip" depends="generateadmin"
       description="Generate a src.zip file with all the server source.">
    <zip destfile="${build.dir}/src.zip">
      <zipfileset dir="${src.dir}" excludes="**/.svn" filemode="644"
opends/pom-maven.xml
New file
@@ -0,0 +1,284 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
  ! CDDL HEADER START
  !
  ! The contents of this file are subject to the terms of the
  ! Common Development and Distribution License, Version 1.0 only
  ! (the "License").  You may not use this file except in compliance
  ! with the License.
  !
  ! You can obtain a copy of the license at
  ! trunk/opendj3/legal-notices/CDDLv1_0.txt
  ! or http://forgerock.org/license/CDDLv1.0.html.
  ! See the License for the specific language governing permissions
  ! and limitations under the License.
  !
  ! When distributing Covered Code, include this CDDL HEADER in each
  ! file and include the License file at
  ! trunk/opendj3/legal-notices/CDDLv1_0.txt.  If applicable,
  ! add the following below this CDDL HEADER, with the fields enclosed
  ! by brackets "[]" replaced with your own identifying information:
  !      Portions Copyright [yyyy] [name of copyright owner]
  !
  ! CDDL HEADER END
  !
  !      Copyright 2013 ForgeRock AS
  !
-->
<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.forgerock.opendj</groupId>
    <artifactId>opendj-project</artifactId>
    <version>3.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>opendj-server</artifactId>
  <version>2.5.0-SNAPSHOT</version>
  <name>OpenDJ Directory Server</name>
  <description>
    OpenDJ is a new LDAPv3 compliant directory service, developed for the Java
    platform, providing a high performance, highly available and secure store
    for the identities managed by enterprises.
  </description>
  <inceptionYear>2006</inceptionYear>
  <scm>
    <url>https://svn.forgerock.org/opendj/trunk/opends/</url>
    <connection>scm:svn:https://svn.forgerock.org/opendj/trunk/opends/</connection>
    <developerConnection>scm:svn:https://svn.forgerock.org/opendj/trunk/opends/</developerConnection>
    <tag>HEAD</tag>
  </scm>
  <ciManagement>
    <system>jenkins</system>
    <url>http://builds.forgerock.org/job/OpenDJ%20-%20trunk%20-%20postcommit</url>
    <notifiers>
      <notifier>
        <type>mail</type>
        <sendOnError>true</sendOnError>
        <sendOnFailure>true</sendOnFailure>
        <sendOnSuccess>false</sendOnSuccess>
        <sendOnWarning>false</sendOnWarning>
        <address>opendj-dev@forgerock.org</address>
      </notifier>
    </notifiers>
  </ciManagement>
  <repositories>
    <repository>
      <id>forgerock-staging-repository</id>
      <name>ForgeRock Release Repository</name>
      <url>http://maven.forgerock.org/repo/releases</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>forgerock-snapshots-repository</id>
      <name>ForgeRock Snapshot Repository</name>
      <url>http://maven.forgerock.org/repo/snapshots</url>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
    <repository>
      <id>oracle</id>
      <name>Oracle Release Repository</name>
      <url>http://download.oracle.com/maven</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>
  <properties>
    <grizzly.version>2.3</grizzly.version>
    <opendj.sdk.version>3.0.0-SNAPSHOT</opendj.sdk.version>
    <crest.version>2.0.0-SNAPSHOT</crest.version>
    <ant.home>ext/ant</ant.home>
    <generatedSourcesDirectory>target/generated-sources</generatedSourcesDirectory>
  </properties>
  <dependencies>
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4.5</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>[3.1-b02]</version>
    </dependency>
    <dependency>
      <groupId>com.sleepycat</groupId>
      <artifactId>je</artifactId>
      <version>5.0.73</version>
    </dependency>
    <dependency>
      <groupId>org.forgerock.opendj</groupId>
      <artifactId>opendj-rest2ldap-servlet</artifactId>
      <version>${opendj.sdk.version}</version>
    </dependency>
    <dependency>
      <groupId>org.forgerock.opendj</groupId>
      <artifactId>opendj-server2x-adapter</artifactId>
      <version>${opendj.sdk.version}</version>
      <!--exclude  module="opendj-server"/-->
    </dependency>
    <dependency>
      <groupId>org.glassfish.grizzly</groupId>
      <artifactId>grizzly-http-servlet</artifactId>
      <version>${grizzly.version}</version>
      <!--exclude module="javax.servlet-api" /-->
    </dependency>
    <dependency>
      <!-- this is built when we are calling maven-antrun-plugin -->
      <groupId>org.forgerock.opendj</groupId>
      <artifactId>build-tools</artifactId>
      <version>1.0</version>
      <scope>system</scope>
      <systemPath>${user.dir}/build/build-tools/build-tools.jar</systemPath>
    </dependency>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>5.7</version>
      <classifier>jdk15</classifier>
      <scope>test</scope>
      <!-- FIXME: We are using a custom built version, but because of this
           we cannot use test scope, let's find a version that works better
      <scope>system</scope>
      <systemPath>${user.dir}/ext/testng/lib/testng-5.7b-jdk15.jar</systemPath-->
    </dependency>
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <version>1.0.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>1.9.5</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>src/server</sourceDirectory>
    <resources>
      <resource>
        <directory>resource</directory>
      </resource>
    </resources>
    <!--testSourceDirectory>tests/unit-tests-testng</testSourceDirectory>
    <testResources>
      <testResource>
        <directory>tests/unit-tests-testng/resource</directory>
      </testResource>
    </testResources-->
  <!--build>
    <directory>target</directory>
    <outputDirectory>target/classes</outputDirectory>
    <finalName>${artifactId}-${version}</finalName>
    <testOutputDirectory>target/test-classes</testOutputDirectory>
    <sourceDirectory>src/main/java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
      </testResource>
    </testResources>
  </build-->
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
          <!-- Use <excludes> tag for excluding from production code -->
          <testExcludes>
            <exclude>**/snmp/*.java</exclude>
          </testExcludes>
        </configuration>
      </plugin>
      <!--plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.14.1</version>
        <configuration>
          <suiteXmlFiles>
            <suiteXmlFile>ext/testng/testng.xml</suiteXmlFile>
          </suiteXmlFiles>
        </configuration>
      </plugin-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <configuration>
          <!--  Required for release:perform: the parent pom specifies a value
                for "arguments" in the plugin configuration. This prevents
                command line setting of the option. -->
          <arguments>-Penforce -Dopendmk.lib.dir=${opendmk.lib.dir}</arguments>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <inherited>true</inherited>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <property name="absoluteGenSrcDir" location="${user.dir}/${generatedSourcesDirectory}" />
                <property name="msg.javagen.dir"   location="${absoluteGenSrcDir}" />
                <property name="admin.src.dir"     location="${absoluteGenSrcDir}" />
                <!--property name="snmp.gen.dir"    location="${absoluteGenSrcDir}" /-->
                <ant target="generatesources" inheritAll="true" inheritRefs="true" />
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <phase>generate-sources</phase>
            <goals><goal>add-source</goal></goals>
            <configuration>
              <sources>
                <source>${generatedSourcesDirectory}</source>
                <source>src/ads</source>
                <!--source>src/build-tools</source--><!--  We are using build-tools.jar -->
                <source>src/guitools</source>
                <source>src/messages/src</source>
                <source>src/quicksetup</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>