2013-06-16 39 views
7

Tôi có một dự án maven với nhiều mô-đun maven được tổ chức xung quanh pom mẹ. Tất cả các mô-đun này được đóng gói thành các tệp JAR phụ thuộc vào Play của tôi! ứng dụng được xây dựng như một dự án SBT:tích hợp dự án sbt (play!) Với maven parent pom

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

Vì tất cả các module maven là các dự án con của module mẹ (MyProject), tôi có thể đi đến 'MyProject', thực hiện dự án mvn clean install và toàn bộ, trừ PlayApplication sẽ được xây dựng. Câu hỏi đặt ra là làm cách nào để tôi có thể sửa đổi tệp xây dựng phụ huynh/SBT để kích hoạt bản dựng PlayApplication cùng với phần còn lại của mô-đun?

(Tôi biết rằng có lẽ không có đơn giản, xây dựng-in cách để làm điều đó, vì vậy tất cả hacks được hoan nghênh :))

Trả lời

9

Sử dụng play2-maven-plugin - bạn có thể lập dự án như dự án maven bình thường.

Ví dụ về Build.scala (tất cả các thay đổi này sẽ được đồng bộ giữa pom và 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 nộp

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

Move tất cả phụ thuộc từ Build.scala để pom tập tin. Maven không biết về Build.scala (Tôi không kiểm tra nó)

LƯU Ý

Nếu bạn sử dụng IDE eclipse (scala-ide) - hãy chạy lệnh: play eclipse luôn khi bạn cập nhật tập tin pom . Lệnh này cập nhật .classpath. Trong ý tưởng tôi nghĩ rằng phụ thuộc được cập nhật tự động.

CẬP NHẬT
Thêm <directory>${basedir}/target/scala-${play2-scala.version}</directory> vào tệp pom. Chơi theo mặc định biên dịch tất cả vào thư mục này (vấn đề trong ý tưởng).

CHO CỘNG ĐỒNG IDEA VERSION
Bạn có thể sử dụng ý tưởng mà không cần cắm chơi - nhập khẩu dự án của bạn như dự án maven để ý tưởng. Đừng gọi play idea trước đây.

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