Reputation: 21267
I have a dependency which I have installed in Maven local repository and is being used locally but is not available on deployment server. I use that dependency using Class.forName(...)
so there will be no problem if it's missed from classpath on deployment server.
Is there any way to tell Maven to ignore a dependency if it failed to resolve it?
I doesn't seem that <scope>
or <optional>
can solve this problem, but it may be possible to do it with <profiles>
if there is any way to activate/deactivate a profile based on dependencies availability.
Upvotes: 19
Views: 28842
Reputation: 1
Please try to exclude the dependencies from the POM
<executions>
<execution>
<id>***failed dependency Id***</id>
</execution>
</executions>
Upvotes: -2
Reputation: 66751
Bizarrely, I had a problem with maven where it would say "cannot resolve dependency" (of some weird transitive dependency that didn't exist anymore), but it only failed with that error message if my ~/.m2/settings.xml
had a
got my jars from a local repository
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>a name</id>
<url>http://somewhere/local/a</url>
</repository>
If I changed it to mirror, it would not fail.
<mirrors>
<mirror>
<id>a name</id>
<name>an awesome description</name>
<url>http://some/where/local</url>
<mirrorOf>external:*</mirrorOf>
(same repo). Go figure.
Upvotes: 0
Reputation: 7990
Short answer: no.
Long answer: Once dependency is declared - either in common part or in an active profile - it must be resolvable when Maven attempts it; otherwise the build fails.
If maven allowed the requested behavior, the reproducibility of build would suffer a lot.
If obscurity and irreproducibility is not an issue for you, here is a hint how to do it:
In any case, I strongly discourage including such things into maven build. Having it as separate functionality, invoked via ant from commandline, might often be enough.
Upvotes: 7
Reputation: 444
assuming the missing dependency is only important in the local environment you can use a combination of profile and activation via your .m2/settings.xml
You remove the dependency from your general dependencies and move it as a referenced dependency into a profile of your pom.xml (Project level profile) and activate the profile through your m2/settings.xml.
You may also remove the dependency completly from your pom.xml and move the dependency into a profile which resides in your .m2/settings.xml (User level profile)
see the introduction to profiles section
another way which fits your needs maybe better
The activation of the above mentioned profile based on the presence of the file in .m2/repository/local/dependency/1.0.0-Snapshot/local.jar
<profiles>
<profile>
<activation>
<file>
<exists>/home/user/.m2/repository/local/dependency/1.0.0-Snapshot/local.jar</exists>
</file>
</activation>
...
</profile>
</profiles>
Upvotes: 1