Làm thế nào để sử dụng sbt từ phía sau proxy?


85

Làm cách nào để cấu hình sbt để sử dụng proxy?

Ví dụ, nhu cầu xây dựng định nghĩa của tôi để kết nối với GitHub, xác định các thông số kết nối cho http.proxy, http.proxyPort, user, và password.

Làm cách nào để chuyển các cài đặt này sang sbt?

Có cách nào dễ dàng để chuyển đổi giữa các cài đặt proxy / không có proxy khi tôi làm việc tại nhà không?

Câu trả lời:


135

sbt tôn trọng các biến môi trường thông thường cho cài đặt proxy http:

export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password"

( Tất nhiên, đó là giả sử Unix (Linux / OSX, v.v.). Trên windows, bạn có thể đặt cùng một biến môi trường ( %JAVA_OPTS%) như bình thường theo cách của Windows. )

Sau đó chạy sbtnhư bình thường:

sbt

Việc chuyển đổi giữa proxy / no-proxy nên là vấn đề của việc thiết lập một tập lệnh nhỏ mà bạn có thể 'đọc' bất cứ khi nào bạn cần.

Gotchas

  • Không bao gồm "http: //" trong yourservergiá trị
  • Không bao gồm cổng trong yourservergiá trị
  • Bạn có thể cũng muốn bao gồm https.proxyHosthttps.proxyPortvì rất nhiều thứ hoạt động trên https
  • Nếu proxy của bạn yêu cầu xác thực, thậm chí đừng bận tâm thử trừ khi nó chỉ sử dụng Xác thực cơ bản vì SBT không hỗ trợ bất kỳ thứ gì khác. Cũng luôn luôn lưu ý thông tin xác thực nhắn tin rõ ràng vào các biến môi trường! Đảm bảo xóa các lệnh khỏi .bash_history của bạn bằng phương pháp chỉnh sửa văn bản sẽ không tạo tệp theo dõi (về mặt kỹ thuật, bạn nên làm như vậy shredhoặc srmtoàn bộ tệp). Nếu bạn đang sử dụng Windows, đừng lo lắng về điều đó, bảo mật của bạn đã bị xáo trộn, bạn không thể làm hại thêm được nữa.

1
Cảm ơn, đây là câu trả lời chính xác. Hóa ra vấn đề thực sự của tôi là proxy của tôi chặn các cổng được GIT sử dụng, vì vậy tôi phải sử dụng giao thức http.
supyo

4
+1 Tuy nhiên, trên Windows 7, từ Command Prompt, tôi phải sử dụng set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=passwordđể điều này hoạt động.
HeatfanJohn

4
Không hiệu quả với tôi, tôi tiếp tục nhận được "proxy của bạn yêu cầu xác thực" và nó không thành công. Tôi đứng sau một NTLM kế thừa :(
samthebest 23/10/14

6
Sau khi tôi tìm ra nó - tôi nhận ra rằng trong trường hợp của tôi, tôi PHẢI sử dụng tham số hệ thống HTTPS java -Dhttps.proxyHost -Dhttps.proxyPort!
Conny Kreyßel

1
Trong trường hợp bạn đứng sau một NTLM cũ, tôi khuyên bạn nên sử dụng CNTLM, nó hoạt động với tôi
Elouan Keryell-Even

25

sbt hoạt động theo cách khá chuẩn so với cách các dự án dựa trên JVM khác thường được cấu hình.

sbt trên thực tế là hai "hệ thống con" - trình khởi chạy và lõi. Nó thường xsbt.boot.Bootđược thực thi trước khi lõi khởi động với các tính năng mà chúng ta đều biết (và một số thậm chí còn thích).

Do đó, vấn đề về cách bạn thực thi sbt nói lên cách bạn có thể thiết lập proxy cho lưu lượng truy cập mạng HTTP, HTTPS và FTP.

Sau đây là toàn bộ danh sách các thuộc tính có sẵn có thể được đặt cho bất kỳ ứng dụng Java nào, bao gồm cả sbt, hướng dẫn API Java định tuyến giao tiếp thông qua proxy:

  • http Proxy
  • http_proxy_user
  • http_proxy_pass
  • http.proxyHost
  • http.proxyPort
  • http.proxyUser
  • http.proxyPassword

Thay thế httpở trên bằng httpsftpđể lấy danh sách các thuộc tính cho các dịch vụ.

Một số sbttập lệnh sử dụng JAVA_OPTSđể thiết lập cài đặt proxy với -Dhttp.proxyHost-Dhttp.proxyPortgiữa các tập lệnh khác (được liệt kê ở trên). Xem Mạng Java và proxy .

Một số tập lệnh có cách riêng để thiết lập cấu hình proxy bằng thuộc SBT_OPTStính .sbtoptshoặc (chỉ trên Windows) %SBT_HOME%\conf\sbtconfig.txt. Bạn có thể sử dụng chúng để đặt sbt cụ thể để sử dụng proxy trong khi các ứng dụng dựa trên JVM khác hoàn toàn không bị ảnh hưởng.

Từ sbtcông cụ dòng lệnh:

# jvm options and output control
JAVA_OPTS          environment variable, if unset uses "$java_opts"
SBT_OPTS           environment variable, if unset uses "$default_sbt_opts"
.sbtopts           if this file exists in the current directory, it is
                   prepended to the runner args
/etc/sbt/sbtopts   if this file exists, it is prepended to the runner args
-Dkey=val          pass -Dkey=val directly to the java runtime
-J-X               pass option -X directly to the java runtime 
                   (-J is stripped)
-S-X               add -X to sbt's scalacOptions (-S is stripped)

Và đây là một đoạn trích từ sbt.bat:

@REM Envioronment:
@REM JAVA_HOME - location of a JDK home dir (mandatory)
@REM SBT_OPTS  - JVM options (optional)
@REM Configuration:
@REM sbtconfig.txt found in the SBT_HOME.

Hãy cẩn thận với sbtconfig.txtđiều đó chỉ hoạt động trên Windows chỉ . Khi bạn sử dụng cygwintệp không được tư vấn và bạn sẽ phải sử dụng các cách tiếp cận khác.

Tôi đang sử dụng sbt với tập lệnh sau:

$JAVA_HOME/bin/java $SBT_OPTS -jar /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar "$@"

Mục đích của tập lệnh là sử dụng phiên bản sbt mới nhất được xây dựng từ các nguồn (đó là lý do tại sao tôi đang sử dụng /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) với thuộc $SBT_OPTStính làm phương tiện truyền các thuộc tính JVM đến các mục đích sử dụng của JVM.

Tập lệnh trên cho phép tôi đặt proxy trên dòng lệnh trên MacOS X như sau:

SBT_OPTS="-Dhttp.proxyHost=proxyhost -Dhttp.proxyPort=9999" sbt

Như bạn có thể thấy, có nhiều phương pháp để đặt proxy cho sbt, tất cả đều được áp dụng để đặt proxy cho sbt JVM sử dụng.


13

Trong môi trường windows chỉ cần thêm dòng sau vào sbt / sbtconfig.txt

-Dhttp.proxyHost=PROXYHOST 
-Dhttp.proxyPort=PROXYPORT 
-Dhttp.proxyUser=USERNAME 
-Dhttp.proxyPassword=XXXX

hoặc Https tương đương (nhờ nhận xét)

-Dhttps.proxyHost=PROXYHOST 
-Dhttps.proxyPort=PROXYPORT 
-Dhttps.proxyUser=USERNAME 
-Dhttps.proxyPassword=XXXX

3
Điều này hiệu quả với tôi miễn là tôi cũng thêm một dòng khác trong sbtconfig.txt với các thuộc tính tương đương https . Tôi đã sử dụng chính xác các giá trị giống như cho các thuộc tính http tương ứng. Do đó: -Dhttps.proxyHost = PROXYHOST -Dhttps.proxyPort = PROXYPORT -Dhttps.proxyUser = USERNAME -Dhttps.proxyPassword = XXXX
snark

4
LƯU Ý QUAN TRỌNG: không hoạt động nữa! Bạn phải sử dụng sbt/conf/sbtoptstệp thay thế.
asachet

@ antoine-sac Tôi có thể tìm sbt/conf/sbtoptstệp để đặt proxy ở đâu?
krozaine

1
@krozaine trong thư mục cài đặt sbt C:\Program Files (x86)\sbt\conf\sbtopts- rõ ràng là của tôi - trên windows.
asachet 25/09/17

@ Antoine-sac nó dường như làm việc cho tôi mà không chạm vào sbtoptstập tin
enissay

12

Tôi đã sử dụng (đây là môi trường unix):

export SBT_OPTS="$SBT_OPTS -Dhttp.proxyHost=myproxy-Dhttp.proxyPort=myport"

Điều này không hoạt động cho thiết lập của tôi:

export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=myproxy-Dhttp.proxyPort=myport"

Trong tệp sbt.sh:

JAVA_OPTS          environment variable, if unset uses "$java_opts"
SBT_OPTS           environment variable, if unset uses "$default_sbt_opts"

Nhưng dường như SBT_OPTS được sử dụng thay vì JAVA_OPTS


Tôi không thể tìm thấy trên Internet nơi tôi nên đặt sbt.shtệp trong dự án của mình!
hadilq 14/09/18

Biến SBT_OPTS ENV là điều duy nhất mà đã làm cho nó làm việc cho tôi trên CentOS
Icarus

9

Đối với người dùng Windows, hãy nhập lệnh sau:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080

3
Trong trường hợp của tôi, tôi cũng phải thêm cài đặt cho https ... codeđặt JAVA_OPTS = -Dhttp.proxySet = true -Dhttp.proxyHost = <Proxy Server> -Dhttp.proxyPort = <Port> -Dhttp.proxyUser = <Username> - Dht tp.proxyPassword = <Mật khẩu> -Dhttps.proxySet = true -Dhttps.proxyHost = <Proxy Server> -Dhttps.proxyPort = <Port> -Dhttps.proxyUser = <Username> -Dhttp s.proxyPassword = <Password>code
Arun

6

Để cung cấp một câu trả lời sẽ hoạt động cho tất cả người dùng Windows:

Thêm phần sau vào sbtconfig.txt của bạn (C: \ Program Files (x86) \ sbt \ conf)

-Dhttp.proxyHost=XXXXXXX -Dhttp.proxyPort=YYYY -Dhttp.proxySet=true -Dhttps.proxyHost=XXXXXXX -Dhttps.proxyPort=YYYY -Dhttps.proxySet=true

Thay thế cả XXXXXXX bằng proxyHost của bạn và cả YYYY bằng proxyPort của bạn.

Nếu bạn gặp lỗi "Không thể tìm thấy hoặc tải lớp chính", bạn cần đặt JAVA_HOME của mình:

set JAVA_HOME=C:\Progra~1\Java\jdkxxxxxx

Khi sử dụng cửa sổ 64-bit, hãy sử dụng:

Progra ~ 1 = 'Tập tin chương trình'

Progra ~ 2 = 'Tập tin chương trình (x86)'


4

Thêm cả cấu hình http và https:

export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password"

export JAVA_OPTS="$JAVA_OPTS -Dhttps.proxyHost=yourserver -Dhttps.proxyPort=8080 -Dhttps.proxyUser=username -Dhttps.proxyPassword=password"

(Phải cấu hình https, vì nhiều url được các thư viện sbt gọi là https)

Trên thực tế, tôi thậm chí còn có một cài đặt bổ sung 'http.proxySet'cho 'true'cả hai mục cấu hình.


3

Khi tôi thêm thông tin proxy vào% JAVA_OPTS%, tôi gặp lỗi "-Dhttp.proxyHost = máy chủ của bạn không mong muốn tại thời điểm này". Tôi đặt thông tin proxy trong% SBT_OPTS% và nó hoạt động.


6
Trên windows, tôi gặp lỗi tương tự nhưng cài đặt SBT_OPTS đã sửa lỗi nhưng không đặt proxy. Giải pháp là đặt JAVA_OPTS hoặc SBT_OPTS nhưng không có dấu ngoặc kép xung quanh giá trị.
pgras

2

Sử dụng

sbt -Dhttp.proxyHost=yourServer-Dhttps.proxyHost=yourServer -Dhttp.proxyPort=yourPort -Dhttps.proxyPort=yourPort

hoạt động trong Ubuntu 15.10 x86_64 x86_64 GNU / Linux.

Thay thế yourServer bằng địa chỉ thích hợp mà không có tiền tố http: // hoặc https: // trong Dhttp và Dhttps, tương ứng. Nhớ tránh dấu ngoặc kép. Không có usr / pass nào được bao gồm trong dòng mã, để bao gồm chỉ cần thêm -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass với cùng tiêu chí nhập. Cảm ơn @Jacek Laskowski !. Chúc mừng


không đâu đó là dòng lệnh sạch để sao chép và dán nhanh chóng, chỉ là anh chàng @mad đó!
user278049

2

Tôi thấy một mục trên phần Câu hỏi thường gặp của Lightbend Activator hữu ích. Tôi đang sử dụng Activator, lần lượt sử dụng SBT, vì vậy không chắc liệu điều này có giúp ích cho người dùng chỉ với SBT hay không, nhưng nếu bạn sử dụng Activator, giống như tôi và sử dụng proxy, hãy làm theo hướng dẫn trong phần "Phía sau một Proxy" của Câu hỏi thường gặp:

https://www.lightbend.com/activator/docs

Đề phòng trường hợp nội dung biến mất, đây là bản sao-dán:

Khi chạy trình kích hoạt đằng sau proxy, cần có một số cấu hình bổ sung. Đầu tiên, mở tệp cấu hình trình kích hoạt, được tìm thấy trong thư mục chính người dùng của bạn dưới ~ / .activator / activatorconfig.txt. Lưu ý rằng tệp này có thể không tồn tại. Thêm các dòng sau (mỗi dòng một tùy chọn):

-Dhttp.proxyHost=PUT YOUR PROXY HOST HERE
-Dhttp.proxyPort=PUT YOUR PROXY PORT HERE
-Dhttp.nonProxyHosts="localhost|127.0.0.1"
-Dhttps.proxyHost=PUT YOUR HTTPS PROXY HOST HERE
-Dhttps.proxyPort=PUT YOUR HTTPS PROXY PORT HERE
-Dhttps.nonProxyHosts="localhost|127.0.0.1"

2

SBT sử dụng cả HTTP / HTTPS / SFTP / SSH và các loại kết nối khác tới kho lưu trữ. vì vậy khi đằng sau proxy, các giao thức này sẽ có sẵn.

Trong hầu hết các trường hợp đơn giản trên Windows, bạn chỉ cần chuyển các tùy chọn tham số proxy cho JVM, như:

java -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=8080

Điều đó sẽ làm.

Nhưng nếu không, có một số điều bạn nên biết:

  1. cho dù bạn đang tạo kết nối HTTPS với kho lưu trữ.
  2. chứng chỉ máy chủ có được nhập vào jre cacerts không
  3. proxy của bạn có thay thế chứng chỉ máy chủ của bạn không

để giải quyết trước tiên, bạn nên chuyển tham số proxy https cho jvm, như:

java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=8080 -Djavax.net.ssl.trustStore=${TRUST_STORE_PATH}

để giải quyết thứ hai, bạn nên nhập ca. có rất nhiều lời khuyên.

để giải quyết vấn đề thứ ba, bạn có thể xem xét sử dụng proxy xác thực.

Để đơn giản hóa cấu hình của SBT, nó cung cấp sbtconfig.txt và sbtops trong thư mục conf, hãy xem xét nó.

Tham khảo:
http://www.scala-sbt.org/0.13/docs/Setup-Notes.html
http://www.scala-sbt.org/1.0/docs/Publishing.html


loại thông báo lỗi nào bạn nhận được khi đó là vấn đề về chứng chỉ? Khi tôi sử dụng thuộc tính http, tôi nhận được thông báo rõ ràng cho biết có thể tôi đang sử dụng proxy, v.v. Khi chuyển sang thuộc tính httpS, tôi không có thông báo nữa, vì vậy tôi cho rằng nó tốt hơn ... nhưng tôi gặp sự cố như được mô tả ở đây: stackoverflow.com/questions/43464585/…
Vincent F

1

Trên Mac OS X / El Capitan, bạn có thể đặt các biến môi trường java:

$launchctl setenv _JAVA_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"

1

Tôi thấy rằng việc khởi động IntelliJ IDEA từ thiết bị đầu cuối cho phép tôi kết nối và tải xuống qua internet. Để bắt đầu từ terminal, hãy nhập:

$ idea


0

Nếu bạn đang sử dụng Proxy yêu cầu xác thực, tôi có giải pháp cho bạn :)

Như @Faiz đã giải thích ở trên, SBT rất khó xử lý proxy yêu cầu xác thực. Giải pháp là bỏ qua xác thực này, nếu bạn không thể tắt proxy của mình theo yêu cầu (proxy công ty chẳng hạn). Để làm như vậy, tôi khuyên bạn nên sử dụng proxy mực và định cấu hình nó bằng tên người dùng và mật khẩu của bạn để truy cập proxy công ty của bạn. Xem: https://doc.ubuntu-fr.org/squid Sau đó, bạn có thể đặt các biến môi trường JAVA_OPTS hoặc SBT_OPTS để SBT kết nối với proxy mực cục bộ của riêng bạn thay vì proxy công ty của bạn:

export JAVA_OPTS = "-Dhttps.proxyHost = localhost -Dhttps.proxyPort = 3128 -Dhttp.proxyHost = localhost -Dhttp.proxyPort = 3128"

(chỉ c / c này trong bashrc của bạn mà không cần sửa đổi bất cứ điều gì và nó sẽ hoạt động tốt).

Bí quyết là Squid Proxy không yêu cầu bất kỳ xác thực nào và hoạt động như một trung gian giữa SBT và proxy khác của bạn.

Nếu bạn gặp khó khăn khi áp dụng lời khuyên này, vui lòng cho tôi biết.

Trân trọng,

Edgar


0

Đối với những người vẫn đang truy cập chuỗi này đang cố gắng tìm vị trí / cách định cấu hình proxy HTTP trong IntelliJ, đây là cách tôi quản lý để làm cho nó hoạt động cho mình. Tôi hi vọng cái này giúp được!

(Lưu ý: chỉ định tên người dùng và mật khẩu mạng của bạn trong các ô tương ứng): -

nhập mô tả hình ảnh ở đây


0

Thử cung cấp chi tiết proxy dưới dạng tham số

sbt compile -Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port

Nếu cách đó không hoạt động, hãy thử với JAVA_OPTS (không phải cửa sổ)

export JAVA_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"

sbt compile

hoặc (cửa sổ)

set JAVA_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile

nếu không có gì hoạt động thì hãy đặt SBT_OPTS

(không phải cửa sổ)

export SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"'
sbt compile

hoặc (cửa sổ)

set SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.