2012-07-25 33 views
14

Tôi đang thiết lập ứng dụng phát đầu tiên trong môi trường xây dựng hỗn hợp. Công ty của tôi sử dụng maven cho tất cả mọi thứ (cho đến nay) và tôi đang cố gắng để có được ứng dụng chơi của tôi để tương tác độc đáo với phần còn lại của hiện vật của tôi.Chơi phụ thuộc 2.0 và SNAPSHOT

Có cách nào để nhận ivy/sbt/play để xử lý SNAPSHOTs theo cách tương tự như maven - cụ thể là cập nhật từ kho lưu trữ từ xa (ví dụ, trên công nhân xây dựng) hoặc sử dụng cục bộ. m2 kho lưu trữ cho đến khi phụ thuộc 'hết hạn' và sau đó làm mới nó từ máy chủ.

Tôi đã tuyên bố một phụ thuộc SNAPSHOT trong Build.scala của tôi cho một tạo tác và tôi muốn cập nhật cục bộ cho sự phụ thuộc này để hiển thị cho dự án phát của tôi. Về phía maven, tôi làm như sau

mvn clean install 

đó (tất nhiên) được xây dựng và cài đặt vật bên ngoài của tôi để kho maven địa phương của tôi (tại ~/.m2/kho). Tôi muốn những thay đổi này được hiển thị ngay lập tức cho dự án phát của tôi, nhưng tôi không thể tìm ra cách nói sbt/play to not cache SNAPSHOTs. Bất kể tôi làm gì, sự phụ thuộc này không bao giờ được làm mới trong trò chơi - tôi phải đi vào bộ nhớ đệm ivy chơi thực tế và xóa sự phụ thuộc bằng tay cho bất kỳ thay đổi nào được chọn. Lý tưởng nhất, tôi muốn sbt/ivy chỉ giải quyết đường dẫn đến repo maven cục bộ của tôi và không cache nó trong nội bộ. Tôi đã có những điều sau đây trong Build.scala tôi

val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
    resolvers += "Local Maven Repository" at "file://" + Path.userHome.absolutePath + "/.m2/repository", 
    testOptions in Test := Nil 
) 

Khi tôi chạy một xây dựng trong vở kịch, nó đúng cách sử dụng repo này, nhưng sau đó lưu trữ các kết quả trong bộ nhớ cache ivy. Có một câu thần chú tôi có thể nói cho Ivy/sbt không làm điều này không? Có lẽ một cái gì đó trong ivysettings.xml?

+0

thử chơi của bạn có sạch không? –

+0

http://stackoverflow.com/questions/8224907/re-download-a-snapshot-version-of-a-dependency-using-sbt có trợ giúp không? –

+1

Có - Tôi đã thử mọi sự kết hợp mà tôi có thể nghĩ đến. Một vani chơi 2.0 cài đặt cache SNAPSHOTS và bạn phải tự xóa chúng. Sử dụng sbt 0.11 (không cài đặt trò chơi) sẽ thực hiện tương tự. Ngoài ra, việc sử dụng sbt 0,12 với phiên bản Play 2.1 SNAPSHOT mới nhất cũng sẽ hiển thị điều này. Không có vấn đề gì tôi làm, SNAPSHOT được lưu trữ trong ~/.ivy2/cache và không có cách nào của câu lệnh sbt/play có thể gây ra sbt/play để cập nhật SNAPSHOT này trong bộ nhớ đệm ivy. – dpratt

Trả lời

1

Bạn có thể sử dụng:

  • play reload // Nạp lại dòng điện ứng dụng xây dựng tập tin
  • play update // ứng dụng Cập nhật phụ thuộc

trước khi xây dựng ứng dụng của bạn. Tôi không biết nếu bạn có thể cấu hình sbt để không cache các phụ thuộc SNAPSHOT, nhưng bạn có thể viết kịch bản quá trình xây dựng của bạn để buộc tải lại các phụ thuộc.

5

@kheraud -> sạch/reload/cập nhật -> sẽ không làm việc SBT lưu trữ nó localy và không kiểm tra lại cho ảnh chụp mới trong maven địa phương

@dprat -> Tôi đã được tìm kiếm giải pháp trong web và đã không tìm thấy bất cứ điều gì hơn :( tôi đã từ bỏ - chỉ cần xóa gói địa phương của bạn trong bộ nhớ cache ivy và đừng play update bạn có thể đơn giản hóa nó và làm cho một kịch bản

rm -rf ~/.ivy2/cache/your.package.foo 
play update compile 
2

ở những nơi khác tôi đã nhìn thấy gán này để một Lỗi SBT https://groups.google.com/forum/?fromgroups=#!topic/play-framework/O7_cAdUWQII

Một giải pháp có vẻ là sử dụng Nexus. Bạn sẽ phải triển khai từ maven đến nexus. Bạn sẽ phải sử dụng đường dẫn nexus thay vì mvn. Bạn sẽ phải cài đặt và chạy nexus!

Để cài đặt nexus, hãy truy cập sonatype và tải xuống. Xem quyền truy cập tệp (đọc hướng dẫn) nhưng nó rất đơn giản. Bạn sẽ cần phải đặt các thông tin đăng nhập trong ~/.m2/settings.xml. Mặc định là admin, admin123.

<settings> 
    <servers> 
    <server> 
     <id>snapshots</id> 
     <username>admin</username> 
     <password>admin123</password> 
    </server> 
    </servers> 
</settings> 

Việc triển khai maven được cung cấp cho bạn theo nexus, ví dụ::

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>http://0.0.0.0:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <url>http://0.0.0.0:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

Sau đó, mvn deploy sẽ đặt tài nguyên của bạn ở đó.

Sau đó, trong việc sử dụng chơi SBT

resolvers += "Local Nexus Repository" at "http://0.0.0.0:8081/nexus/content/repositories/snapshots" 

Bạn vẫn cần phải dừng chơi, cập nhật sử dụng vở kịch, và khởi động lại chơi.

0

Tôi không chắc chắn cách thức này hoạt động, nhưng "một người khác nói với tôi" - vâng, đó là mức độ tham chiếu của tôi cho việc này - việc dọn dẹp thư mục "kho lưu trữ" trong cài đặt phát có thể hữu ích.

Tôi có một chút "refresh.sh" kịch bản mà thực hiện điều này:

rm -rf /opt/play/repository/cache/com.mycompany 
play clean 
play update 
play run 

Có vẻ như để làm việc cho tôi. Nơi "/ opt/play" là nơi bạn có cài đặt phát của bạn và "com.mycompany" là những gì bạn cần làm mới.

Tôi không nói điều này là đúng, nhưng nó có thể có giá trị bắn nếu không có gì khác hoạt động.

0

Kể từ phiên bản sbt 0.13.6 (tháng 8 năm 2014), người ta có thể sử dụng cài đặt xây dựng cờ updateOptions trong Build.scala/build.sbt, để kiểm soát độ phân giải SNAPSHOT.

updateOptions := updateOptions.value.withLatestSnapshots(false/true) 

Tài liệu về tính năng mới này là here

Tương ứng pull request trên github để biết chi tiết.

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