2013-06-16 9 views
7

Mam projekt maven z wieloma modułami maven zorganizowanymi wokół rodzica pom. Wszystkie te moduły są pakowane do plików JAR, które są zależne od mojego Play! Aplikacja zbudowana jako projekt SBT:integracja projektu sbt (play!) Z maven parent pom

MyProject 
-> pom.xml (parent) 
MavenModule1 
    -> pom.xml (child pom) 
MavenModule2 
    -> pom.xml (child pom) 
PlayApplication 
    -> Build.scala (SBT project) 

Ponieważ wszystkie moduły są projekty Maven dziecko modułu nadrzędnego (myproject), mogę iść do „MyProject”, wykonać mvn clean install i całego projektu, z wyjątkiem PlayApplication zostanie zbudowany. Pytanie brzmi, w jaki sposób można zmodyfikować plik kompilacji macierzystej pom/SBT, aby uruchomić kompilację PlayApplication wraz z pozostałymi modułami?

(wiem, że prawdopodobnie nie jest prosty, sposób zbudować w to robić, więc wszystkie hacki są mile widziane :))

Odpowiedz

9

Zastosowanie play2-maven-plugin - można skompilować projekt jako normalnego projektu maven.

Przykład Build.scala (wszystkie zmiany powinny być synchronizowane między POM i Build.scala)

import sbt._ 
import Keys._ 
import play.Project._ 
import Path._ 

object ApplicationBuild extends Build { 

    val myExternalPom = super.settings ++ externalPom(baseDirectory(_/"pom.xml")) 
    val appName   = "PlayApplication" 
    val appVersion  = "1.0.0" 

    val appDependencies = Seq(
    jdbc, 
    anorm 
) 


    val main = play.Project(appName, appVersion, appDependencies,file(".")).settings(
    resolvers ++= Seq("Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository" 
     , "central" at "http://artifactory:8081/artifactory/libs-release") 
).settings(
    externalPom() :_* 
) 

} 

Pom plik

<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> 
    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>play2</packaging> 

    <name>Play! Framework 2.x Maven Test Project</name> 

    <repositories> 
     <repository> 
      <id>typesafe</id> 
      <name>Typesafe - releases</name> 
      <url>http://repo.typesafe.com/typesafe/releases/</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 

     <play2.plugin.version>1.0.0-alpha1</play2.plugin.version> 
     <play2.version>2.1.0</play2.version> 
     <play2-scala.version>2.10</play2-scala.version> 
     <scala.version>2.10.0</scala.version> 
    </properties> 
    <parent> 
     <groupId>com.company.project</groupId> 
     <artifactId>my-parent-pom</artifactId> 
     <version>1.0.0</version> 
    </parent> 

    <dependencies> 
     <dependency> 
      <groupId>org.scala-lang</groupId> 
      <artifactId>scala-compiler</artifactId> 
      <version>${scala.version}</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>play</groupId> 
      <artifactId>play_${play2-scala.version}</artifactId> 
      <version>${play2.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <sourceDirectory>${basedir}/app</sourceDirectory> 
     <resources> 
      <resource> 
       <directory>${basedir}/conf</directory> 
      </resource> 
      <resource> 
       <directory>${basedir}</directory> 
       <includes> 
        <include>public/**</include> 
       </includes> 
      </resource> 
     </resources> 
     <directory>${basedir}/target/scala-${play2-scala.version}</directory> 
     <plugins> 
      <plugin> 
       <groupId>com.google.code.play2-maven-plugin</groupId> 
       <artifactId>play2-maven-plugin</artifactId> 
       <version>1.0.0-alpha1</version> 
       <extensions>true</extensions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

przenieść wszystkie zależności od Build.scala Pom pliku. Maven nie wiem o Build.scala (nie mam go przetestować)

UWAGA

Jeśli używasz IDE Eclipse (scala-IDE) - uruchom polecenie: play eclipse zawsze podczas aktualizacji pliku pom . Ta komenda aktualizuje .classpath. W idei myślę, że zależności są aktualizowane automatycznie.

UPDATE
Dodaj <directory>${basedir}/target/scala-${play2-scala.version}</directory> do pom pliku. Domyślnie kompiluj wszystko do tego katalogu (problem w idei).

wersji IDEA WSPÓLNOTY
Można używać pojęcia bez wtyczki Play - import projektu jako projektu maven do pomysłu. Nie dzwoń wcześniej pod numer play idea.

Powiązane problemy