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 件のコメント:
コメントを投稿