B Smith-Mannschott <[email protected]> writes:

> On Sun, Dec 13, 2009 at 23:15, dysinger <[email protected]> wrote:
>> I highly recommend you use the snapshots on build.clojure.org.  Lein
>> already has build.clojure.org snapshots in it's repo list.  You don't
>> need to do anything more than put
>>
>>  :dependencies [[org.clojure/clojure "1.1.0-master-SNAPSHOT"]
>> [org.clojure/clojure-contrib "1.1.0-master-SNAPSHOT"]]
>>
>> in your project.clj
>
> It seems that I wasn't sufficiently clear. I have made changes [1] [2]
> to clojure-contrib that are not in master. What I'm building amounts
> to a personal fork of clojure-contrib. Once my CA is in and it becomes
> time to propose these changes for inclusion, I'll be in a better
> position to do so if they've actually seen some use (i.e. by me).
>
> [1] http://wiki.github.com/bpsm/clojure-contrib/about-branch-ducks-byte
> [2] http://github.com/bpsm/clojure-contrib/commits/ducks-read-forms
>
> // Ben

It seems that everyone uses homemade pom.xml. I fully agree that having
standard one where "mvn install" will just work would be great.
I'm not really an expert on maven (and to be honest don't want to be),
but I managed to create something like that and indeed "mvn install" works
for me.
So here it is pom.xml and two descriptors for jars:

# clojure-jar.xml

<assembly>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>${build}</directory>
      <outputDirectory></outputDirectory>
      <includes>
        <include>**/*.class</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${cljsrc}</directory>
      <outputDirectory></outputDirectory>
      <includes>
        <include>**/*.clj</include>
        <include>clojure/version.properties</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

# slim-jar.xml

<assembly>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>${build}</directory>
      <outputDirectory></outputDirectory>
      <includes>
        <include>clojure/asm/**</include>
        <include>clojure/lang/**</include>
        <include>clojure/main.class</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${cljsrc}</directory>
      <outputDirectory></outputDirectory>
      <includes>
        <include>**/*.clj</include>
        <include>clojure/version.properties</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

# pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>
  <groupId>org.clojure</groupId>
  <artifactId>clojure-contrib</artifactId>
  <name>clojure-contrib</name>
  <version>1.0-SNAPSHOT</version>
  <url>http://clojure.org/</url>
  <packaging>pom</packaging>

  <description>Clojure user contributions library.</description>

  <licenses>
    <license>
      <name>Eclipse Public License 1.0</name>
      <url>http://opensource.org/licenses/eclipse-1.0.php</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <properties>
    <src>src</src>
    <test>test</test>
    <jsrc>${src}/jvm</jsrc>
    <cljsrc>${src}/clj</cljsrc>
    <build>classes</build>
    <jarfile>clojure-contrib-${project.version}</jarfile>
    <slimjarfile>clojure-contrib-slim-${project.version}</slimjarfile>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.clojure</groupId>
      <artifactId>clojure-lang</artifactId>
      <version>1.1.0-alpha-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <distributionManagement>
    <repository>
      <id>releases</id>
      <name>release</name>
      <url>http://localhost:8081/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
      <id>snapshots</id>
      <name>snapshot</name>
      <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
  </distributionManagement>

  <build>
    <sourceDirectory>${src}</sourceDirectory>
    <outputDirectory>${build}</outputDirectory>

    <resources>
      <resource>
        <directory>${src}</directory>
      </resource>
    </resources>

    <plugins>

      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.4</version>

        <executions>
          <execution>
            <id>copy-clojure</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${build}</outputDirectory>
              <resources>          
                <resource>
                  <directory>${src}</directory>
                  <filtering>true</filtering>
                </resource>
              </resources>              
            </configuration>  
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>compile-classes</id>
            <phase>compile</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>java</executable>
              <arguments>
                <argument>-classpath</argument>
                <!-- automatically creates the classpath using all project 
                     dependencies,
                     also adding the project build directory -->
                <classpath/>
                <argument>-Dclojure.compile.path=${build}</argument>

                <argument>clojure.lang.Compile</argument>
                <argument>clojure.contrib.pprint.ColumnWriter</argument>
                <argument>clojure.contrib.pprint.PrettyWriter</argument>
                <argument>clojure.contrib.fnmap.PersistentFnMap</argument>
                <argument>clojure.contrib.condition.Condition</argument>
                <argument>clojure.contrib.jmx.Bean</argument>
              </arguments>
            </configuration>
          </execution>

          <execution>
            <id>compile-clojure</id>
            <phase>compile</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>java</executable>
              <arguments>
                <argument>-classpath</argument>
                <!-- automatically creates the classpath using all project 
                     dependencies,
                     also adding the project build directory -->
                <classpath/>
                <argument>-Dclojure.compile.path=${build}</argument>
                <argument>-Djava.awt.headless=true</argument>

                <argument>clojure.lang.Compile</argument>

                <argument>clojure.contrib.accumulators</argument>
                <argument>clojure.contrib.agent-utils</argument>
                <argument>clojure.contrib.classpath</argument>
                <argument>clojure.contrib.combinatorics</argument>
                <argument>clojure.contrib.command-line</argument>
                <argument>clojure.contrib.complex-numbers</argument>
                <argument>clojure.contrib.cond</argument>
                <argument>clojure.contrib.condition</argument>
                <argument>clojure.contrib.core</argument>
                <argument>clojure.contrib.dataflow</argument>
                <argument>clojure.contrib.datalog</argument>
                <argument>clojure.contrib.datalog.database</argument>
                <argument>clojure.contrib.datalog.literals</argument>
                <argument>clojure.contrib.datalog.magic</argument>
                <argument>clojure.contrib.datalog.rules</argument>
                <argument>clojure.contrib.datalog.softstrat</argument>
                <argument>clojure.contrib.datalog.util</argument>
                <argument>clojure.contrib.def</argument>
                <argument>clojure.contrib.duck-streams</argument>
                <argument>clojure.contrib.error-kit</argument>
                <argument>clojure.contrib.except</argument>
                <argument>clojure.contrib.mock</argument>
                <argument>clojure.contrib.mock.test-adapter</argument>
                <argument>clojure.contrib.fcase</argument>
                <argument>clojure.contrib.find-namespaces</argument>
                <argument>clojure.contrib.fnmap</argument>
                <argument>clojure.contrib.gen-html-docs</argument>
                <argument>clojure.contrib.generic</argument>
                <argument>clojure.contrib.generic.arithmetic</argument>
                <argument>clojure.contrib.generic.collection</argument>
                <argument>clojure.contrib.generic.comparison</argument>
                <argument>clojure.contrib.generic.functor</argument>
                <argument>clojure.contrib.generic.math-functions</argument>
                <argument>clojure.contrib.graph</argument>
                <argument>clojure.contrib.greatest-least</argument>
                <argument>clojure.contrib.import-static</argument>
                <argument>clojure.contrib.jar</argument>
                <argument>clojure.contrib.java-utils</argument>
                <argument>clojure.contrib.javadoc.browse</argument>
                <argument>clojure.contrib.javadoc.browse-ui</argument>
                <argument>clojure.contrib.jmx</argument>
                <argument>clojure.contrib.json.read</argument>
                <argument>clojure.contrib.json.write</argument>
                <argument>clojure.contrib.lazy-seqs</argument>
                <argument>clojure.contrib.lazy-xml</argument>
                <argument>clojure.contrib.macro-utils</argument>
                <argument>clojure.contrib.macros</argument>
                <argument>clojure.contrib.map-utils</argument>
                <argument>clojure.contrib.math</argument>
                <argument>clojure.contrib.miglayout</argument>
                <argument>clojure.contrib.miglayout.internal</argument>
                <argument>clojure.contrib.mmap</argument>
                <argument>clojure.contrib.monads</argument>
                <argument>clojure.contrib.ns-utils</argument>
                <argument>clojure.contrib.pprint.ColumnWriter</argument>
                <argument>clojure.contrib.pprint.PrettyWriter</argument>
                <argument>clojure.contrib.pprint</argument>
                <argument>clojure.contrib.pprint.utilities</argument>
                
<argument>clojure.contrib.probabilities.finite-distributions</argument>
                <argument>clojure.contrib.probabilities.monte-carlo</argument>
                
<argument>clojure.contrib.probabilities.random-numbers</argument>
                <argument>clojure.contrib.prxml</argument>
                <argument>clojure.contrib.repl-ln</argument>
                <argument>clojure.contrib.repl-utils</argument>
                <argument>clojure.contrib.seq-utils</argument>
                <argument>clojure.contrib.server-socket</argument>
                <argument>clojure.contrib.set</argument>
                <argument>clojure.contrib.shell-out</argument>
                <argument>clojure.contrib.singleton</argument>
                <argument>clojure.contrib.sql</argument>
                <argument>clojure.contrib.sql.internal</argument>
                <argument>clojure.contrib.str-utils</argument>
                <argument>clojure.contrib.stream-utils</argument>
                <argument>clojure.contrib.swing-utils</argument>
                <argument>clojure.contrib.trace</argument>
                <argument>clojure.contrib.types</argument>
                <argument>clojure.contrib.with-ns</argument>
                <argument>clojure.contrib.zip-filter</argument>
                <argument>clojure.contrib.zip-filter.xml</argument>
              </arguments>
            </configuration>
          </execution>

          <execution>
            <id>test-contrib</id>
            <phase>integration-test</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>java</executable>
              <arguments>
                <argument>-classpath</argument>
                <classpath/>
                <argument>-Djava.security.policy=config/jmx.policy</argument>

                <argument>clojure.main</argument>

                <argument>-e</argument>
                <argument>(ns test (:require [clojure.contrib [test-contrib :as 
main]])) (main/run)</argument>

              </arguments>
            </configuration>
          </execution>

        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>test-contrib</id>
            <phase>test</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                <echo>!!! For testing use integration-test phase !!!</echo>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <id>clojure-contrib-jar</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <finalName>${jarfile}</finalName>
              <outputDirectory>.</outputDirectory>
              <archive>
                <manifest>
                  <addClasspath>true</addClasspath>
                </manifest>
                <manifestEntries>
                  <Class-Path>.</Class-Path>
                </manifestEntries>
              </archive>
              <descriptors>
                <descriptor>clojure-contrib-jar.xml</descriptor>
              </descriptors>
            </configuration>
          </execution>
          
          <execution>
            <id>slim-jar</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <finalName>${slimjarfile}</finalName>
              <outputDirectory>.</outputDirectory>
              <archive>
                <manifest>
                  <addClasspath>true</addClasspath>
                </manifest>
                <manifestEntries>
                  <Class-Path>.</Class-Path>
                </manifestEntries>
              </archive>
              <descriptors>
                <descriptor>contrib-slim-jar.xml</descriptor>
              </descriptors>
            </configuration>
          </execution>
          
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>skip-install</id>
            <phase>install</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                <echo>!!! Don't use default install phase !!!</echo>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <executions>
          <execution>
            <id>install-clojure-contrib</id>
            <phase>install</phase>
            <goals>
              <goal>install-file</goal>
            </goals>
            <configuration>
              <file>${jarfile}.jar</file>
              <groupId>${project.groupId}</groupId>
              <artifactId>${project.artifactId}</artifactId>
              <version>${project.version}</version>
              <packaging>jar</packaging>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-clean-plugin</artifactId>
        <executions>
          <execution>
            <id>clean-clojure-contrib</id>
            <phase>clean</phase>
            <goals>
              <goal>clean</goal>
            </goals>
            <configuration>
              <filesets>
                <fileset>
                  <directory>.</directory>
                  <includes>
                    <include>${jarfile}.jar</include>
                    <include>${slimjarfile}.jar</include>
                  </includes>
                  <followSymlinks>false</followSymlinks>
                </fileset>
              </filesets>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

HTH,
Rob

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to