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:

Https://svn.apache.org/repos/asf/ant/ivy/core/tags/2.2.0/src/java/org/apache/ivy/util/url/IvyAuthenticator.java

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!

Author: Community, 2013-05-07

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ź.

 23
Author: ngarthl,
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.

 2
Author: JasonG,
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