2013-02-10 13 views
11

Vì Scala 2.10.1 sắp ra mắt, tôi tin rằng, tôi muốn đảm bảo rằng các tạo tác mà tôi xuất bản bây giờ sẽ tự động làm việc với một scala-library.jar của phiên bản đó. Tôi sử dụng SBT 0.12.2 xuất bản, và với một thiết lập củaPhiên bản scala-library.jar trong sbt xuất bản hiện vật

scalaVersion := "2.10.0" 

tôi nhận được một cách chính xác kèm theo phiên bản tương thích nhị phân để vật của tôi, ví dụ

<artifactId>mylibrary_2.10</artifactId> 

... nhưng scala thư viện phụ thuộc vẫn nói 2.10.0:

 <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-library</artifactId> 
     <version>2.10.0</version> <!-- !!! --> 
    </dependency> 

Tôi cho rằng đó không phải là chính xác, và nó nên sử dụng 2.10 hay 2.10 + ở đây.?


Tôi cũng đã cố gắng thêm scalaBinaryVersion := "2.10" nhưng điều đó dường như không thay đổi bất cứ điều gì.

Một ý tưởng khác mà tôi đã sử dụng là scalaVersion := "2.10.+". Sbt mất mãi mãi với Getting Scala 2.10.+ ..., nhưng cuối cùng nó vẫn ổn và pom có phiên bản này ngay bây giờ cho scala-library.jar. Vì vậy, có lẽ đây là cách chính xác?

+1

Dường như phổ biến hơn là 'xây dựng chéo'. Xem http://www.scala-sbt.org/release/docs/Detailed-Topics/Cross-Build để biết thêm thông tin. Tôi không thể cho bạn biết nếu giải pháp bạn tìm thấy là đúng cách. – EECOLOR

+0

Vâng, một điều tôi có thể nói bây giờ là '2.10. +' Bổ sung thêm các vấn đề nghiêm trọng.Tôi chỉ thấy mình bị lỗi typer ở những nơi ngẫu nhiên, cho đến khi tôi phát hiện ra bằng cách nào đó một số dự án đã vẽ một scala-compiler.jar '2.10.1-RC1', rõ ràng là _không tương thích nhị phân_. –

+0

Vâng, phiên bản của thư viện Scala tương đương với phiên bản Scala bạn đang nhắm mục tiêu, vì thư viện scala cho phiên bản 2.10.1 khác với thư viện scala 2.10.0. Tất cả các phiên bản Scala 2.10 được cho là tương thích nhị phân. Bạn có thể đăng loại lỗi nào bạn có khi chuyển từ 2,10.0 sang 2,10.1 không? –

Trả lời

0

Tôi nghĩ rằng nếu bạn đang tạo ra 'chất béo JAR' tất cả mọi thứ được xác định bởi các phiên bản của phụ thuộc trực tiếp (đúng tôi nếu tôi sai) vì phụ thuộc trực tiếp của họ được quy định quá và vv. Tất nhiên điều này không đảm bảo bạn từ một số thành phần phụ thuộc vào phiên bản thư viện Scala khác với bạn muốn, bạn không được bảo đảm từ các thành phần phụ thuộc vào các phiên bản khác nhau của một số lib và dĩ nhiên Scala đang trong giai đoạn phát triển tích cực. với một số phiên bản thư viện Scala và thử nghiệm tốt, cho đến khi điều này thay đổi bạn là OK.

Nhưng bạn không thể đảm bảo mọi thứ sẽ tốt trên thư viện Scala tiếp theo vì bạn cũng có các thành phần khác có thể không được đồng bộ cùng ngày, phải không? Và, vâng, phiên bản của thư viện Scala phải phù hợp với phiên bản của trình biên dịch Scala được sử dụng.

1

Bạn nên sử dụng phiên bản 2.10.x, vì nó có nghĩa là tương thích nhị phân giữa các phiên bản nhỏ (như được ghi trong release notes).

Nói chung, bạn có thể tạo các tạo phẩm cho các phiên bản tùy ý của Scala bằng cách sử dụng cài đặt crossScalaVersions trong sbt.

build.sbt

name := "so-14803362" 

scalaVersion := "2.10.0" 

crossScalaVersions := Seq("2.10.0", "2.10.1", "2.10.2") 

Với cấu hình trên, bạn có thể thêm vào trước một + để SBT lệnh để chạy chúng cho mỗi phiên bản Scala:

> + publish 

này sẽ xây dựng và xuất bản của bạn các tạo phẩm của dự án với mỗi phiên bản Scala được liệt kê trong crossScalaVersions.

Xem sbt docs để biết thêm thông tin.

+0

Cảm ơn. Tôi biết về các phiên bản chéo, tuy nhiên, và tôi vui vẻ từ bỏ điều đó với 2,10. Tôi nghĩ thật kinh khủng khi tăng số lượng hiện vật trên thế giới bằng một hệ số ba hoặc bốn, khi nó không cần thiết. –

+0

Điểm tốt. Dường như với phiên bản 2.10, các phiên bản chéo chỉ tạo ra một tạo phẩm 2.10.x duy nhất, nhưng bạn vẫn có thể cảm thấy tự tin rằng bạn được bảo vệ cho các phiên bản được liệt kê. – earldouglas