2013-07-05 16 views
9

Tło: nasza firma ma kilka gier! aplikacje, których testy działają w naszym wewnętrznym CI. Każda aplikacja Play pobiera zależności od różnych publicznych repozytoriów za pośrednictwem protokołu http. To nie było idealne (omija nasze wewnętrzne repozytorium Nexusa), ale można je znieść. Teraz dodajemy dodatkową pojemność CI i nie chcemy pozwolić nowym urządzeniom na dostęp poza zaporą.Jak usunąć wszystkie domyślne przeliczniki z gry! podanie?

W aplikacji przykład Play, następująca konfiguracja w project/Build.scala nie wystarczy, aby zapobiec gromadzeniu zamiar repo.typesafe.com i repo1.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 jest nasz wewnętrzny gospodarz Nexus, który Prokurenci Maven Central, Typesafe, i inne repozytoria)

Kiedy usuwam niektóre zależności, albo z Maven Central (np. Guava), albo z repozytorium Typesafe (np. wtyczka Play mailer), i uruchamiam play compile, widzę z wyjścia, że ​​zależności wciąż są w g pobierane z repo.typesafe.com i repo1.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) 

Aby związek ten problem, jesteśmy również na nieco starsze wersje wszystko: Scala 2.9.1, Play 2.0.1, SBT 0.11.3.


Jak wymusić wyłączenie aplikacji Play wyłącznie w celu pobrania zależności z wewnętrznego repozytorium?

Odpowiedz

3

tworzyć lub edytować /home/YOUR_HOME/.sbt/repositories dodać następujące:

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

podczas uruchamiania odtwarzania dodać ten parametr: -Dsbt.override.build.repos = true

np .: aktywator run -Dsbt.override.build.repos = true

Zapobiega to odtwarzaniu przez odtwarzanie repozytoriów zdefiniowanych w konfiguracjach projektu.

Aby uzyskać szczegółowe informacje, patrz this.

+1

To jest lepsza odpowiedź niż moja własna. Przy użyciu tej metody lista repozytoriów w pliku kompilacji projektu może pozostać "prawdziwa", wskazując na realne repozytoria. Poszczególne osoby mogą następnie przesłonić w oparciu o własne repozytoria proxy. – Grundlefleck

+0

Próbowałem tego podejścia, gdy studiuję Logam, niestety nie działa. Nie wiem, dlaczego sbt nie wspiera łatwo ustawień Maven jako Gradle. – Hantsy

4

Okazuje się, że należy użyć poprawnej składni sbt.

Kod wymieniony w pytaniu generuje konfigurację dla kompilacji, ale nie przypisuje jej nigdzie. Wierzyłem, że := zastąpił globalną konfigurację dla klucza resolvers, ale tak się nie dzieje.

Umieszczenie następujących w project/Build.scala zmuszony aplikacja Play, aby rozwiązać zależności od naszego wewnętrznego Nexus:

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 
) 

Uwaga przypisując wynik resolvers := do nowego Val, który dodaje się do ustawień projektu w ten sam plik:

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

także pozbył się sbtResolver i externalResolvers częściach config, który miał żadnego wpływu.

Powiązane problemy