2013-04-23 49 views
6

Ứng dụng My Play 2 là một tiểu dự án của ứng dụng Maven lớn hơn. Ứng dụng Play 2 có phụ thuộc trong cha mẹ của nó - nó nhận được quyền truy cập dữ liệu từ nó. Vì vậy, tôi muốn xây dựng ứng dụng phụ thuộc vào dự án Maven bên ngoài.Tải ứng dụng Play/SBT phụ thuộc vào Maven POM

Về cơ bản, tôi muốn viết này:

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

Nhưng tất nhiên đây không phải là cú pháp hợp lệ.

Tôi đã thử định nghĩa của tôi play.Project như thế này:

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

Những thất bại vì (tôi nghĩ) những nguyên nhân override Play để không tải ngoại lệ riêng của mình

tôi đã cố gắng xác định một mới Project như vậy:

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

Và tùy thuộc vào điều đó, không hoạt động vì không có lớp chính nào được phát hiện.

Bất kỳ đề xuất nào về cách thực hiện việc này? Tôi mới đến SBT.

+0

Nghe có vẻ hơi lạ - có khả năng làm cho ứng dụng chơi 2 độc lập không? – sorencito

+0

Chúng tôi đã chuyển từ Maven sang SBT hoàn toàn. Chúng tôi không bao giờ giải quyết được vấn đề trong câu hỏi này. – DCKing

+0

Hoàn toàn hợp lý! – sorencito

Trả lời

0

Tôi successfuly sử dụng play2-maven-plugin

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

Với plugin này bạn tạo mô-đun maven cho ứng dụng play2 như tốt và bạn xác định sự phụ thuộc (truy cập lớp dữ liệu của bạn) trong maven pom. Các plugin sẽ đảm bảo rằng chơi được các phụ thuộc (nó sao chép các phụ thuộc pom vào các phụ thuộc không được quản lý trong thư mục lib).

Sử dụng plugin này cũng cho phép tránh nhiều lần xây dựng lại tẻ nhạt vì bạn có mọi thứ trong một dự án, vì vậy IDE của bạn thấy các thay đổi trên tất cả các mô-đun mà không cần xây dựng lại.

Ngoài ra khi bạn sử dụng plugin, bạn không gặp vấn đề với việc cập nhật phụ thuộc maven chụp nhanh từ kho lưu trữ maven cục bộ (lỗi sbt này https://github.com/sbt/sbt/issues/321).

0

Tôi chỉ làm điều này với play2-maven-pluginsbt-pom-reader.

Đây là cách bạn cần phải cấu hình dự án play2-maven của bạn:

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

Mỗi phòng trong số các tập tin cần có các nội dung sau đây.

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: Dự án

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

/build.properties:

sbt.version=0.13.0 

dự án/build.scala:

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

dự án/plugin.sbt:

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

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

Tôi không có cách nào thực tế để xác minh xem câu trả lời này là chính xác, vì tôi không sử dụng Maven với SBT nữa. Nếu bất kỳ ai cũng có thể xác minh câu trả lời này hoặc câu trả lời khác, tôi rất sẵn lòng đánh dấu câu trả lời đúng. – DCKing

Các vấn đề liên quan