2013-07-05 37 views
9

Bối cảnh: công ty chúng tôi có một số Play! các ứng dụng có kiểm tra chạy trong CI nội bộ của chúng tôi. Mỗi ứng dụng Play truy xuất các phụ thuộc từ các kho lưu trữ công khai khác nhau trên http. Điều này đã không được lý tưởng (nó bỏ qua kho lưu trữ Nexus nội bộ của chúng tôi) nhưng bearable. Bây giờ chúng tôi đang bổ sung thêm dung lượng CI, và không muốn cho phép các máy mới có thể truy cập bên ngoài tường lửa.Cách xóa tất cả các trình phân giải mặc định khỏi Play! ứng dụng?

Trong một ứng dụng ví dụ Play, cấu hình như sau trong project/Build.scala là không đủ để ngăn chặn việc xây dựng sẽ repo.typesafe.comrepo1.maven.org:

sbtResolver := "Typesafe (proxy)" at "http://repo-1/nexus/content/repositories/typesafe-releases/" 

resolvers := Seq(
    "Maven Central (proxy)" at "http://repo-1/nexus/content/repositories/central/", 
    "Typesafe (proxy)" at "http://repo-1/nexus/content/repositories/typesafe-releases/", 
    // some more internal Nexus repositories 
) 

externalResolvers := Seq.empty 

(repo-1 là chủ Nexus nội bộ của chúng tôi, mà ủy nhiệm Maven Trung ương, typesafe, và các kho lưu trữ khác)

Khi tôi xóa một số phụ thuộc, hoặc từ Trung tâm Maven (ví dụ: Guava) hoặc từ kho lưu trữ của Typesafe (ví dụ plugin Playerer) và chạy play compile, tôi thấy từ đầu ra là phụ thuộc vẫn còn g lấy từ repo.typesafe.comrepo1.maven.org:

[info] downloading http://repo.typesafe.com/typesafe/releases/com/typesafe/play-plugins-mailer_2.9.1/2.0.2/play-plugins-mailer_2.9.1-2.0.2.jar ... 
[info] [SUCCESSFUL ] com.typesafe#play-plugins-mailer_2.9.1;2.0.2!play-plugins-mailer_2.9.1.jar (981ms) 
[info] downloading http://repo1.maven.org/maven2/com/google/guava/guava/12.0/guava-12.0.jar ... 
[info] [SUCCESSFUL ] com.google.guava#guava;12.0!guava.jar (1422ms) 

trở nên phức tạp vấn đề, chúng tôi cũng vào hơi phiên bản cũ của tất cả mọi thứ: Scala 2.9.1, 2.0.1 Chơi, SBT 0.11.3.


Làm cách nào để buộc ứng dụng Play truy xuất các phụ thuộc từ một kho lưu trữ nội bộ, độc quyền?

Trả lời

3

Chỉnh sửa hoặc tạo /home/YOUR_HOME/.sbt/repositories thêm như sau:

[repositories] local my-maven-proxy-releases: http://nexus_domain_or_ip:8081/nexus/content/groups/public/

khi chạy chơi thêm tham số này: -Dsbt.override.build.repos = true

ví dụ: trình kích hoạt chạy -Dsbt.override.build.repos = true

Điều này ngăn không cho phát tải các kho được xác định trong cấu hình dự án.

Xem this để biết chi tiết.

+1

Đây là câu trả lời hay hơn của chính tôi. Sử dụng phương thức này, danh sách kho lưu trữ trong tệp xây dựng của dự án có thể vẫn là 'true', trỏ đến kho thực sự. Sau đó, cá nhân có thể chọn ghi đè dựa trên kho proxy của riêng họ. – Grundlefleck

+0

Tôi đã thử phương pháp này khi tôi nghiên cứu Logam, thật không may là nó không hoạt động. Tôi không lý do tại sao sbt không hỗ trợ cài đặt Maven dễ dàng như Gradle. – Hantsy

4

Hóa ra câu trả lời là sử dụng đúng cú pháp sbt.

Mã được liệt kê trong câu hỏi là tạo cấu hình cho bản dựng nhưng không gán nó ở bất kỳ đâu. Tôi tin rằng := đã thay thế cấu hình chung cho khóa resolvers nhưng không.

Đưa sau trong project/Build.scala buộc ứng dụng Play để giải quyết phụ thuộc từ Nexus nội bộ của chúng tôi:

val nexusResolvers = resolvers := Seq(
    "Maven Central (proxy)" at "http://repo-1/nexus/content/repositories/central/", 
    "Typesafe (proxy)" at "http://repo-1/nexus/content/repositories/typesafe-releases/", 
    // some more internal Nexus repositories 
) 

Lưu ý gán kết quả của resolvers := đến một val mới, sau đó được bổ sung vào các thiết lập của dự án trong cùng một tệp:

val main = PlayProject(...) 
    .settings(nexusResolvers: _*) 

Ngoài ra, đã loại bỏ các cấu hình sbtResolverexternalResolvers không có hiệu lực.