sbt: publikowanie do korporacyjnego repozytorium Nexus nieautoryzowane
Szybka rozdzielczość
Wymagane poświadczenie oczekuje dokładnego obszaru zdefiniowanego przez nexus. Zobacz poniżej, jak znaleźć ten, który zdefiniowałeś, ale z pewnością jest "Sonatype Nexus Repository Manager". Dodaj resztę szczegółów do poświadczeń, jak zwykle.
C:/data/user/sbt/credentials
realm=Sonatype Nexus Repository Manager
host=nexus
user=repouser
password=password
Budować.sbt creditions += Creditions (Path.userHome/"sbt"/".poświadczenia")
publishTo <<= version { v: String =>
val nexus = "http://nexus/"
if (v.trim.endsWith("SNAPSHOT"))
Some("snapshots" at nexus + "content/repositories/libs-snapshots")
else
Some("releases" at nexus + "content/repositories/libs-releases")
}
Problem
I ' m trying aby opublikować jar w korporacyjnym repo nexus.
Jestem w stanie zrobić to dobrze z Mavena, i skonfigurowałem repozytoria, aby móc używać Nexusa do dostarczania wewnętrznych słoików. Jednak publikacja nie powiedzie się z powodu autoryzacji.
> publish
[info] Packaging c:\app\target\scala-2.10\app_2.10-0.1-sources.jar ...
[info] Wrote D:\app\target\scala-2.10\app_2.10-0.1.pom
[info] :: delivering :: com.app#app_2.10;0.1 :: 0.1 :: release :: Tue May 07 18:28:44 BST 2013
[info] Done packaging.
[info] delivering ivy file to D:\app\target\scala-2.10\ivy-0.1.xml
[info] Packaging D:\app\target\scala-2.10\app_2.10-0.1.jar ...
[info] Done packaging.
[trace] Stack trace suppressed: run last *:publish for the full output.
[error] (*:publish) java.io.IOException: Access to URL http://nexus/content/groups/common/com/app/app_2.10/0.1/app_2.10-0.1.pom was refused by the server: Unauthorized
C:/data/user/sbt/credentials
realm=X
host=nexus
user=repouser
password=password
C:/data/user/sbt / repozytoria
[repositories]
local
x-repo: http://nexus/content/groups/common
typesafe-ivy-releases: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
sbt-plugin-releases: http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/
maven-central
App / build.sbt
name := "app"
organization := "com.app"
version := "0.1"
scalaVersion := "2.10.1"
libraryDependencies ++= Seq(
"org.scalatest" % "scalatest_2.10" % "2.0.M5b" % "test"
)
EclipseKeys.withSource := true
publishMavenStyle := true
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")
publishTo := Some("X Maven Repo" at "http://nexus/content/groups/common")
Moje Ustawienia Mavena.xml
<mirrors>
<mirror>
<id>x-repo</id>
<name>X Maven repo</name>
<url>http://nexus/content/groups/common</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<servers>
<server>
<id>x-repo</id>
<username>repouser</username>
<password>password</password>
</server>
</servers>
Wykonałem instrukcje od oficjalnego doc i wiele innych postów, w tym StackOverflow, taki one lub lista dyskusyjna, taka jak this . Nic nie działało. Próbowałem włączyć dodatkowe logowanie, ale nie podano dalszych szczegółów.
Mogę ręcznie wdrożyć do Mavena używając tego polecenia:
mvn deploy:deploy-file -Durl=http://nexus/content/repositories/libs-snapshots -DrepositoryId=x-repo -DgroupId=com.app -DartifactId=app -Dpackaging=jar -Dversion=0.1-SNAPSHOT -Dfile=D:\app\target\scala-2.10\app_2.10-0.1.jar
Próbowałem użyć poniższego publishTo, również bez powodzenia
publishTo <<= version { v: String =>
val nexus = "http://nexus/"
if (v.trim.endsWith("SNAPSHOT"))
Some("snapshots" at nexus + "content/repositories/libs-snapshots")
else
Some("releases" at nexus + "content/repositories/libs-releases")
}
Polecenia działają poprawnie, dopóki nie muszą być autoryzowane, w którym momencie zawodzą.
The Realm in the credities, does it corresponds do Id repozytorium Serwera w maven lub nazwę? Albo nie działa.
Próbowałem włączyć więcej logowania dla Ivy, ale nie mogłem uzyskać więcej szczegółów.
Set ivyLoggingLevel: = UpdateLogging.Pełne
Zgodnie z tym, powinno być dalsze logowanie:
Jestem za wewnętrznym proxy, więc muszę ustawić zarówno HTTP użytkownik i HTTPS użytkownik i hasło. Może to tutaj jest blokowane?
Jakieś sugestie jak zwiększyć poziom wyrębu bluszczu?
Update
Mam coś do pracy, używającSBT-aether-deploy plugin, który wykorzystuje infrastrukturę Maven (wagon) do wdrożenia.
/ Align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center / W rzeczywistości Królestwo nie miało znaczenia.Poniżej znajdują się użyte linie:
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")
publishTo <<= version { v: String =>
val nexus = "http://nexus/"
if (v.trim.endsWith("SNAPSHOT"))
Some("snapshots" at nexus + "content/repositories/libs-snapshots")
else
Some("releases" at nexus + "content/repositories/libs-releases")
}
seq(aetherSettings: _*)
seq(aetherPublishSettings: _*)
Coś nie jest pomiędzy proxy, ivy i nexus.
[11]} nadal byłbym zainteresowany sugestiami użycia ivy.Dalsza aktualizacja:
Użycie
curl -X POST http://nexusUser:nexusPassword@nexus/content/repositories/libs-snapshots -v
Udało mi się dotrzeć do serwera.
Ten sam wynik określający proxy do użycia (jest skonfigurowany tak, aby omijać sieci lokalne, ale niektóre procesy Javy, takie jak SBT, wydają się wymagać nagłówków)
Gdy nexusUser: nexusPassword nie były sprecyzowane, otrzymywałem następujące nagłówek:
W przeciwieństwie do innych systemów operacyjnych, nie jest to możliwe.]}Faktycznie to był problem, dane uwierzytelniające wymagały, aby Nazwa Realm była dokładnie tym nagłówkiem, w przeciwieństwie do innych niestandardowych nazw repozytorium, jak definiuje maven.
Wielkie dzięki!
2 answers
Ivy używa domeny nagłówka WWW-Authenticate, który będzie musiał dopasować bajt do bajtu równego temu skonfigurowanemu w pliku poświadczeń.
SBT-aether-deploy używa tego samego nagłówka, ale używa eteru jako swojego mechanizmu wdrażania. Ivy nie.
Najprostszym sposobem ustalenia wartości nagłówka WWW-Authenticate jest użycie cURL.
curl -X POST http://nexus/content/repositories/libs-snapshots -v > /dev/null
CURL zapyta Cię o użytkownika i przejdzie.
- v doda zwięzłość, dzięki czemu będziesz mógł zobaczyć nagłówki wniosek i odpowiedź.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-16 17:12:49
Podejrzewam, że ścieżka do pliku poświadczeń może być nieprawidłowa. Spróbuj to zmienić:
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")
Do tego:
credentials += Credentials("c:/data/user/.sbt/.credentials")
Lub spróbuj najpierw rozwiązać problem:
credentials += Credentials("Sonatype Nexus Repository Manager",
"nexus.scala-tools.org", "admin", "admin123")
Jeśli nie działają, sprawdź, czy Twoje poświadczenia są ważne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-16 17:30:11