2013-04-23 13 views
6

L'applicazione My Play 2 è un sottoprogetto di un'applicazione Maven più grande. L'app Play 2 ha dipendenze nel suo genitore - ottiene il suo accesso ai dati da esso. Pertanto, voglio che la Build dell'applicazione dipenda dal progetto Maven esterno.Ottenere un'app Play/SBT per dipendere da un Maven POM

Fondamentalmente, voglio scrivere questo:

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

Ma naturalmente questo non è sintassi valida.

Ho cercato di definire la mia play.Project in questo modo:

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

che non riesce perché (credo) le cause di override Gioca a non caricare la propria eccezione

ho provato la definizione di una nuova Project così:

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

E a seconda di ciò, che non funziona perché non è stata rilevata alcuna classe principale.

Qualche suggerimento su come farlo? Sono nuovo di SBT.

+0

Sembra un po 'strano, c'è qualche possibilità di rendere indipendente l'app di gioco 2? – sorencito

+0

Siamo passati da Maven a SBT del tutto. Non abbiamo mai risolto il problema in questa domanda. – DCKing

+0

Perfettamente ragionevole! – sorencito

risposta

0

sto con successo usando play2-maven-plugin

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

Con questo plugin si crea modulo Maven per play2 app come bene e si definiscono le dipendenze (il vostro livello di accesso ai dati) in Maven pom. Il plugin farà in modo che play ottenga le dipendenze (copia le dipendenze del pom nelle dipendenze non gestite nella directory lib).

L'utilizzo di questo plug-in consente inoltre di evitare molte ripetizioni noiose perché si dispone di tutto in un unico progetto, pertanto l'IDE vede le modifiche su tutti i moduli senza una ricostruzione.

Anche quando si utilizza il plug-in, non si hanno problemi con l'aggiornamento delle dipendenze Maven dello snapshot dal repository locale di Maven (questo errore sbt https://github.com/sbt/sbt/issues/321).

0

L'ho appena fatto con play2-maven-plugin e sbt-pom-reader.

Questo è come è necessario configurare il vostro progetto 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. 

Ogni file deve avere i seguenti contenuti.

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 

progetto/build.properties:

sbt.version=0.13.0 

progetto/build.scala:

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

progetto/plugin.sbt:

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

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

Non ho un modo pratico per verificare se questa risposta è corretta, poiché non uso più Maven con SBT. Se qualcuno può verificare questa o l'altra risposta, sarei felice di segnare una risposta corretta. – DCKing

Problemi correlati