Scalaプログラミングを始める際に、ちょっとした障壁になるかもしれないのがMavenのpom.xmlの定義である。もちろん、調べればわかることなんだけど、このちょっとしたことが大きな障壁になる。また、Scala 2.8はベータ版なので、少し余分に情報収集しないといけない。
そこで、参考に3月1日「XML, DOM, XSLT, NekoHtmlを使う」のsdoc2blogger用のpom.xmlを載せておきます。
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.goldenport</groupId>
<artifactId>sdoc2blogger</artifactId>
<packaging>jar</packaging>
<version>0.1</version>
<name>sdoc2blogger</name>
<build>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.12.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<showDeprecation>true</showDeprecation> <!-- XXX not work -->
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.goldenport.sdoc2blogger.Main</mainClass>
<packageName>org.goldenport.sdoc2blogger</packageName>
<addClasspath>true</addClasspath>
<addExtensions>true</addExtensions>
<classpathPrefix></classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>nekohtml-0.9.5.jar
scala-library-2.8.0-20100228.024500-331.jar
scalatest-1.0-for-scala-2.8.0-SNAPSHOT.jar
sdoc2blogger-0.1.jar xercesImpl-2.4.0.jar</Class-Path>
</manifestEntries>
<!--
<manifestFile></manifestFile>
-->
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/assemble/bin.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<scala.version>2.8.0-SNAPSHOT</scala.version>
</properties>
<repositories>
<repository>
<id>snapshots.scala-tools.org</id>
<name>Scala-tools Maven2 Repository - Snapshots</name>
<url>http://scala-tools.org/repo-snapshots</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>scala-tools.org</id>
<name>Scala-tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.8.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest</artifactId>
<version>1.0-for-scala-2.8.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>0.9.5</version>
</dependency>
</dependencies>
</project>
プラグインは以下の通り。maven-scala-pluginがポイント。maven-jar-pluginとmaven-assembly-pluginは配備モジュールを生成するために入れている。
- maven-scala-plugin
- maven-compiler-plugin
- maven-jar-plugin
- maven-assembly-plugin
リポジトリは以下の通り。Scala 2.8はまだベータ版なのでhttp://scala-tools.org/repo-snapshotsをリポジトリに加えるのがポイント。
- http://scala-tools.org/repo-snapshots
- http://scala-tools.org/repo-releases
Scala処理系とScalaTestは、以下のように2.8.0-SNAPSHOT版を指定する。
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.8.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest</artifactId>
<version>1.0-for-scala-2.8.0-SNAPSHOT</version>
</dependency>
sdoc2bloggerに固有の依存性は以下の通り。nekohtmlのみの指定だと古いXercesを取ってきてしまうので、Xercesは最新版を明示的に設定している。
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>0.9.5</version>
</dependency>
assemblyに使うbin.xmlは以下の通り。
bin.xml
<assembly>
<id>bin</id>
<formats>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<moduleSets>
<moduleSet>
<binaries>
<outputDirectory>lib</outputDirectory>
<unpack>false</unpack>
</binaries>
</moduleSet>
</moduleSets>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
<scope>runtime</scope>
<outputDirectory>/</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
普通はformatをzipにするところなんだけど、開発中のプログラムはディレクトリに展開しておいて、以下のようなスクリプトを使って実行可能にしているので、このようにしている。
#! /bin/sh
scala -cp \
"z:/usr/local/src/sdoc2blogger/target/sdoc2blogger-0.1-bin.dir/sdoc2blogger-0.1.jar" \
org.xmlsmartdoc.sdoc2blogger.Main $*

0 件のコメント:
コメントを投稿