2011-08-25 26 views
12

Câu hỏi của tôi là chạy một ứng dụng trong dự án được quản lý bởi sbt 0.10.1 và do đó dựa vào quản lý phụ thuộc tự động của nó (để tải xuống và thiết lập đường dẫn lớp thích hợp để chạy).Làm thế nào để chạy một dự án ứng dụng quản lý sbt mà không cần sbt?

Khi sử dụng quản lý phụ thuộc tự động, xuất hiện là cách duy nhất để chạy ứng dụng đang sử dụng chính sbt vì nó biết cách thiết lập đường dẫn lớp (với sự trợ giúp của Ivy2).

Làm cách nào để chạy ứng dụng mà không có sbt?

Trả lời

11

Bạn cũng có thể sử dụng typesafe của xsbt-start-script-plugin (chỉnh sửa: bây giờ sbt-start-script) để tạo ra một kịch bản shell với đường dẫn lớp đúng:

Plugin này cho phép bạn tạo ra một kịch bản target/start cho một dự án . Tập lệnh sẽ chạy dự án "tại chỗ" (không có để xây dựng gói trước).

Kịch bản target/start tương tự như sbt run nhưng không phụ thuộc vào trên SBT. sbt run không được khuyến khích sử dụng trong sản xuất vì nó giữ SBT trong bộ nhớ. target/start được thiết kế để chạy ứng dụng trong quá trình sản xuất.

Plugin thêm nhiệm vụ start-script tạo ra target/start. Nó cũng thêm một nhiệm vụ stage, được đặt tên cho nhiệm vụ start-script.

Đây là những gì Heroku uses để chạy ứng dụng Scala.

+0

Đây là những gì tôi đang sử dụng bây giờ - hoạt động tuyệt vời. – Thakur

+0

Xin chào Ben, có thể bạn có gợi ý cho [câu hỏi này] (http://stackoverflow.com/questions/23607291/run-a-sbt-created-app-without-sbt)? Một ví dụ đầy đủ về 'sbt-start-script' sẽ thực sự được chào đón. –

+0

đây vẫn là con đường để đi? Chỉ tò mò thôi .. – alapeno

3

Tôi đã sử dụng retronym 's sbt-onejar plugin để tạo các lọ thực thi với tất cả các phụ thuộc được bao gồm (giống như Assembly plugin cho Maven). Nó rất đơn giản và được tài liệu hóa.

+0

Plugin lặp lại +1 trông đẹp hơn nút tôi đề xuất, vì nó không giải nén các phụ thuộc –

2

Nếu bạn muốn tạo một bình “chất béo” chứa tất cả các ứng dụng và phụ thuộc của bạn, bạn có thể sử dụng sbt-assembly plugin. Sau đó, bạn có thể chạy ứng dụng của mình như một tiêu chuẩn jar mà không cần sbt.

1

Bạn cũng có thể tạo tác vụ để tạo tệp để khởi chạy ứng dụng. @Kipton Barros posted này trong How do I run an sbt main class from the shell as normal command-line program?:

val MkUnixlauncher = config("mkunixlauncher") extend(Compile) 
    val mkunixlauncher = TaskKey[Unit]("mkunixlauncher") 
    val mkunixlauncherTask = mkunixlauncher <<= (target, fullClasspath in Runtime) map { (target, cp) => 
    def writeFile(file: File, str: String) { 
     val writer = new PrintWriter(file) 
     writer.println(str) 
     writer.close() 
    } 
    val cpString = cp.map(_.data).mkString(System.getProperty("path.separator")) 
    val launchString = """ 
CLASSPATH="%s" 
scala -usejavacp -Djava.class.path="${CLASSPATH}" "[email protected]" 
""".format(cpString) 
    val targetFile = (target/"scala-sbt").asFile 
    writeFile(targetFile, launchString) 
    targetFile.setExecutable(true) 
    } 

Điều đó tạo ra một file có tên scala-SBT trong thư mục mục tiêu của bạn có classpath thiết lập đúng để chạy các ứng dụng. Tinh chỉnh để nếm thử.

+0

Điều này đến gần nhất với những gì tôi mong muốn đạt được. – Thakur

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