ちょっと気になったことがあって、調べてみたのでメモ。
> makePom
というコマンドを実行すればよいそうです。
Publishing(Version 0.13.5)
http://www.scala-sbt.org/0.13.5/docs/Detailed-Topics/Publishing.html
pomを作成してみる
例えば、こんなbuild.sbtを用意。
name := "sbt-maven-pom" version := "0.0.1-SNAPSHOT" scalaVersion := "2.11.2" organization := "org.littlewings" scalacOptions ++= Seq("-Xlint", "-deprecation", "-unchecked", "-feature") incOptions := incOptions.value.withNameHashing(true) resolvers += Resolver.sonatypeRepo("public") val log4j2Version = "2.0.1" libraryDependencies ++= Seq( "net.databinder.dispatch" %% "dispatch-jsoup" % "0.11.2", "com.jsuereth" %% "scala-arm" % "1.4", "com.github.scopt" %% "scopt" % "3.2.0", "org.apache.logging.log4j" % "log4j-api" % log4j2Version, "org.apache.logging.log4j" % "log4j-core" % log4j2Version, "org.apache.logging.log4j" % "log4j-slf4j-impl" % log4j2Version, "org.scalatest" %% "scalatest" % "2.2.1" % "test" )
*依存関係の定義は、適当に自分の作っているものから持ってきました…
これを置いたプロジェクトでsbtを起動して、以下のコマンドを実行すると
> makePom
下記のようにtarget配下にpomが出力されます。
[info] Wrote /xxxxx/sbt-maven-pom/target/scala-2.11/sbt-maven-pom_2.11-0.0.1-SNAPSHOT.pom [success] Total time: 0 s, completed 2014/08/17 19:07:40
できあがったpomは、こんな感じ。
target/scala-2.11/sbt-maven-pom_2.11-0.0.1-SNAPSHOT.pom
<?xml version='1.0' encoding='UTF-8'?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <groupId>org.littlewings</groupId> <artifactId>sbt-maven-pom_2.11</artifactId> <packaging>jar</packaging> <description>sbt-maven-pom</description> <version>0.0.1-SNAPSHOT</version> <name>sbt-maven-pom</name> <organization> <name>org.littlewings</name> </organization> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.11.2</version> </dependency> <dependency> <groupId>net.databinder.dispatch</groupId> <artifactId>dispatch-jsoup_2.11</artifactId> <version>0.11.2</version> </dependency> <dependency> <groupId>com.jsuereth</groupId> <artifactId>scala-arm_2.11</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>com.github.scopt</groupId> <artifactId>scopt_2.11</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>org.scalatest</groupId> <artifactId>scalatest_2.11</artifactId> <version>2.2.1</version> <scope>test</scope> </dependency> </dependencies> <repositories> <repository> <id>sonatypepublic</id> <name>sonatype-public</name> <url>https://oss.sonatype.org/content/repositories/public/</url> <layout>default</layout> </repository> </repositories> </project>
プロジェクトのルートディレクトリに「pom.xml」という名前でファイルを作成する
この場合は、build.sbtに以下のような設定を加えます。
makePomConfiguration := makePomConfiguration.value.copy(file = new File("pom.xml"))
reload後、makePomで出力されるpomの位置が変わります。
> makePom [info] Wrote /xxxxx/sbt-maven-pom/pom.xml [success] Total time: 0 s, completed 2014/08/17 19:10:39
publishで書かれている内容なので、自分で生成したpom.xmlを利用する場合以外で変にいじるのは良くないと思いますが。
その他
ちなみに、こういう設定を加えたら、少し頑張ってくれるのかなと思ったのですが、出力されるpom.xmlには特に何も反映されませんでした。
javacOptions ++= Seq("-source", "1.8", "-target", "1.8")
まあ、個人的には依存関係を出力してくれるだけで十分なので、特に困らないと思いますが。