SBT: Cannot publish to Apache Archiva

archiva, maven, sbt, scala

Solution

The Security Realm is important to Ivy. It's like the only dependency manager that requires you to use a valid Security realm. I believe for apache archiva it's "Repository Archiva Managed". You can check by trying to do your own HTTP request to Archiva and see what Realms it tells you it supports.

Here's code which attempts to detect security realms: https://github.com/sbt/sbt-pom-reader/blob/2b515b58739ef7bdfad8f98248e901db8e140892/src/main/scala/com/typesafe/sbt/pom/MavenHelper.scala#L212-L221

Update: The realm looks like: "Repository Archiva Managed internal Repository". If you publish to other repos, replace "internal" with the name of the repo.

once you determine the security realm, you want to update your build as follows:

  credentials += Credentials(
      "Repository Archiva Managed internal Repository",  // Or whatever you detect as the security realm
      "maven.company.com",
      "username",
      "password"
    ),

Problem

Error message: ``` java.io.IOException: Access to URL http://maven.company.com/repository/internal/com/company/ project_2.10/0.0.3/project_2.10-0.0.3.pom was refused by the server: Unauthorized ``` Running Apache Archiva 1.4-M4(latest), I am able to upload via the web interface, but not via SBT. Using these settings in SBT: ``` publishTo := Some("company releases" at "http://maven.company.com/repository/internal"), credentials += Credentials( "company Maven Repository", "maven.company.com", "username", "password" ), publishMavenStyle := true, publishArtifact in Test := false, pomIncludeRepository := { _ => true }, // .. some xml with author details } ``` All details, including username, password and urls are correct.

Original source