2013-04-23 9 views
6

Aplikacja My Play 2 jest podprojektem większej aplikacji Maven. Aplikacja Play 2 ma zależności w macierzystym - uzyskuje z niej dostęp do danych. Dlatego chcę, aby kompilacja aplikacji była zależna od zewnętrznego projektu Maven.Uzyskiwanie aplikacji Play/SBT zależnej od Maven POM

Zasadniczo chcę napisać to:

val main = play.Project(appName, appVersion, appDependencies).settings(
    // settings 
).dependsOn(externalPom(baseDirectory(_/"../pom.xml"))) 

Ale oczywiście to nie jest prawidłowa składnia.

Próbowałem definiowania mój play.Project tak:

val main = play.Project(appName, appVersion, appDependencies).settings(
    externalPom(baseDirectory(_/"../pom.xml")) 
) 

która nie dlatego, że (chyba) przyczyny nadpisywania Play nie załadować własny wyjątek

Próbowałem definiowania nowego Project tak:

lazy val data = Project("data", file(baseDirectory(_/"..).settings(
    externalPom(baseDirectory(_/  "../pom.xml")) 
) 

I w zależności od tego, co nie działa, ponieważ nie wykryto głównej klasy.

Wszelkie sugestie, jak to zrobić? Jestem nowy w SBT.

+0

Brzmi trochę dziwnie - czy jest jakaś szansa, aby ta gra 2 była niezależna? – sorencito

+0

Łącznie przełączyliśmy się z Mavena na SBT. Nigdy nie rozwiązaliśmy problemu w tym pytaniu. – DCKing

+0

Idealnie rozsądny! – sorencito

Odpowiedz

0

mam powodzeniem stosując PLAY2-maven-plugin

http://nanoko-project.github.io/maven-play2-plugin/maven/release/

Dzięki tej wtyczce utworzyć moduł maven dla PLAY2 aplikacji, jak również i definiowania zależności (Twój warstwy dostępu do danych) w maven POM. Wtyczka zapewnia, że ​​gra otrzymuje zależności (kopiuje zależności pom do niezarządzanych zależności w katalogu lib).

Używanie tej wtyczki pozwala także uniknąć wielu żmudnych przebudowań, ponieważ masz wszystko w jednym projekcie, więc twoje IDE widzi zmiany we wszystkich modułach bez przebudowy.

Również, gdy używasz wtyczki, nie masz problemów z aktualizowaniem zależności snapshot maven z lokalnego repozytorium maven (ten błąd sbt: https://github.com/sbt/sbt/issues/321).

0

Po prostu zrobiłem to z play2-maven-plugin i sbt-pom-reader.

ten sposób trzeba skonfigurować swój projekt PLAY2-maven:

<my-maven-project>/ 
    pom.xml     <- Your maven build 
    build.sbt    <- the sbt Play 2 configuration 
    project/ 
    build.properties  <- the sbt version specification 
    build.scala   <- the sbt build definition 
    plugins.sbt   <- the sbt plugin configuration 

    ..      <- Whatever files are normally in your maven project. 

Każdy z plików powinny mieć następującą treść.

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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>play2</packaging> 
    <name>My mavenified Play 2 application</name> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <play2.version>2.2.1</play2.version> 
     <play2-scala.version>2.10</play2-scala.version> 
     <play2.plugin.version>1.0.0-alpha5</play2.plugin.version> 
     <scala.version>2.10.2</scala.version> 
    </properties> 
    <repositories> 
     <repository> 
      <id>typesafe</id> 
      <name>Typesafe - releases</name> 
      <url>http://repo.typesafe.com/typesafe/releases/</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 
    <dependencies> 
     <dependency> 
      <groupId>org.scala-lang</groupId> 
      <artifactId>scala-library</artifactId> 
      <version>${scala.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe.play</groupId> 
      <artifactId>play_${play2-scala.version}</artifactId> 
      <version>${play2.version}</version> 
     </dependency> 
     <!-- only if using Java --> 
     <dependency> 
      <groupId>com.typesafe.play</groupId> 
      <artifactId>play-java_${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> 
     <!--<outputDirectory>target/scala-${play2-scala.version}/classes</outputDirectory>--> 
     <plugins> 
      <plugin> 
       <groupId>com.google.code.play2-maven-plugin</groupId> 
       <artifactId>play2-maven-plugin</artifactId> 
       <version>${play2.plugin.version}</version> 
       <extensions>true</extensions> 
       <dependencies> 
        <dependency> 
         <groupId>com.google.code.play2-maven-plugin</groupId> 
         <artifactId>play2-provider-play22</artifactId> 
         <version>${play2.plugin.version}</version> 
        </dependency> 
       </dependencies> 
       <!-- only if using Java --> 
       <configuration> 
        <mainLang>java</mainLang> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

build.sbt:

play.Project.playJavaSettings //or play.Project.playScalaSettings 

projektu/build.properties:

sbt.version=0.13.0 

projekt/build.scala:

object BuildFromMavenPomSettings extends com.typesafe.sbt.pom.PomBuild 

projekt/wtyczki.sbt:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.1") 

addSbtPlugin("com.typesafe.sbt" % "sbt-pom-reader" % "1.0.1") 
+0

Nie mam żadnego praktycznego sposobu na sprawdzenie, czy ta odpowiedź jest poprawna, ponieważ nie używam Mavena z SBT. Jeśli ktokolwiek może zweryfikować tę lub inną odpowiedź, z przyjemnością zaznaczę poprawną odpowiedź. – DCKing

Powiązane problemy