2013-04-23 10 views
6

Meine Play 2-Anwendung ist ein Teilprojekt einer größeren Maven-Anwendung. Die Play 2 App hat Abhängigkeiten in ihrem Elternteil - sie erhält ihren Datenzugriff von ihr. Daher möchte ich, dass der Build der Anwendung vom externen Maven-Projekt abhängig ist.Abrufen einer Play/SBT-App von einem Maven POM

Grundsätzlich möchte ich dies schreiben:

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

Aber natürlich nicht gültige Syntax ist.

Ich habe versucht, meine Definition von play.Project wie folgt aus:

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

, die wegen fehlschlägt (glaube ich) spielen die Umgehungs Ursachen nicht seine eigene Ausnahme

Ich habe versucht, laden Sie eine neue Project definieren wie folgt:

Und abhängig davon, was nicht funktioniert, weil es keine Hauptklasse erkannt wird.

Irgendwelche Vorschläge, wie man das macht? Ich bin neu bei SBT.

+0

Klingt ein bisschen seltsam - es gibt eine Chance, das Spiel 2 App unabhängig zu machen? – sorencito

+0

Wir wechselten von Maven zu SBT. Wir haben das Problem in dieser Frage nie gelöst. – DCKing

+0

Perfekt angemessen! – sorencito

Antwort

0

I successfuly bin mit play2-Maven-Plugin

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

Mit diesem Plugin können Sie auch Maven-Modul für play2 App erstellen und Sie definieren die Abhängigkeiten (Ihre Datenzugriffsschicht) in Maven pom. Das Plugin stellt sicher, dass play die Abhängigkeiten erhält (es kopiert die Pom-Abhängigkeiten in die nicht verwalteten Abhängigkeiten im lib-Verzeichnis).

Mit diesem Plugin können Sie auch viele langwierige Neuerstellungen vermeiden, da Sie alles in einem Projekt haben, so dass Ihre IDE Änderungen in allen Modulen ohne Neuaufbau sieht.

Auch wenn Sie das Plugin verwenden, haben Sie keine Probleme mit der Aktualisierung Snapshot Maven Abhängigkeiten von lokalen Maven Repository (dieser sbt Bug https://github.com/sbt/sbt/issues/321).

0

Ich habe das gerade mit play2-maven-plugin und sbt-pom-reader getan.

Dies ist, wie Sie Ihr play2-Maven Projekt konfigurieren müssen:

<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. 

Jede der Dateien sollte folgenden Inhalt haben.

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 

Projekt/build.properties:

sbt.version=0.13.0 

Projekt/build.scala:

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

Projekt/Plugins.sbt:

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

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

Ich habe keine praktische Möglichkeit zu überprüfen, ob diese Antwort korrekt ist, da ich Maven nicht mehr mit SBT verwende. Wenn jemand diese oder die andere Antwort verifizieren kann, würde ich gerne eine korrekte Antwort markieren. – DCKing

Verwandte Themen