psfblair
psfblair

Reputation: 51

Why does sbt keep downloading my snapshot dependencies?

I have an SBT project that depends on two snapshot dependencies. Every time I build it, it goes off to the remote repository to fetch the dependencies. This is true even if I set offline := true.

When I look at how it is trying to resolve the local dependencies, the build is saying it is looking in "local", i.e., ~/.ivy2/local/... -- which is a nonexistent directory.

The jars are in ~/.ivy2/cache/... and this is where SBT downloads them when it pulls the dependencies from the remote server.

I have searched my .sbt and .scala build files and the string "local" does not appear in them in connection with a repository or cache.

SBT is at version 0.13.11 building against scala 2.11.8.

Why is SBT doing this, and how can I get it to see the cached jars?

Upvotes: 2

Views: 1246

Answers (2)

psfblair
psfblair

Reputation: 51

This apparently is because in my Ivy cache I had a file named ~/.ivy2/cache/com.xxx/xxx-utils/ivy-2.3.2-SNAPSHOT.xml.original , which the build was trying and failing to parse. I'm not sure where this file came from; conceivably it was put there manually ages ago.

Upvotes: 0

Filippo Vitale
Filippo Vitale

Reputation: 8113

If you want to prevent SBT from trying to download from official repositories you could simply create a file project/offline-repositories:

[repositories]
  mirror-central: file:////nexus/central
  mirror-maven-central-org: file:////nexus/maven-central-org
  ...

(/nexus/central and /nexus/maven-central-org should contain a (partial) mirror of what you need offline)

Then call sbt with the sbt.repository.config property configured:

-Dsbt.override.build.repos=true \
-Dsbt.repository.config=./project/offline-repositories

For Reference:

EDIT

If you want to use your ~/.m2 cache:

[repositories]
  mirror-central: file:////home/XXXXX/.m2/repository
  mirror-maven-central-org: file:////home/XXXXX/.m2/repository
  ...

Upvotes: 1

Related Questions