简体   繁体   中英

How to specify sbt dependency along with the intended JDK version

How do I specify the JDK version of a dependency in my Build.sbt ?

I encounter such a case with the Aspose library, where the filename is postfixed with JDK version, ie aspose-email-4.8.0-jdk17.jar instead of the plain aspose-email-4.8.0.jar . So, specifying the dependency normally, eg

"com.aspose" % "aspose-email" % "4.8.0"

will cause sbt to complain with the following error, as the poor SBT tries to download a non-existing file:

[warn]  [FAILED     ] com.aspose#aspose-email;4.8.0!aspose-email.jar:  (0ms)
[warn] ==== local: tried
[warn]   /Users/developer/.ivy2/local/com.aspose/aspose-email/4.8.0/jars/aspose-email.jar
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/com/aspose/aspose-email/4.8.0/aspose-email-4.8.0.jar
[warn] ==== Aspose: tried
[warn]   http://maven.aspose.com/artifactory/simple/ext-release-local/com/aspose/aspose-email/4.8.0/aspose-email-4.8.0.jar
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::              FAILED DOWNLOADS            ::
[warn]  :: ^ see resolution messages for details  ^ ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.aspose#aspose-email;4.8.0!aspose-email.jar
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
sbt.ResolveException: download failed: com.aspose#aspose-email;4.8.0!aspose-email.jar

Update Then I figured that appending the JDK version to the version number might fix it:

"com.aspose" % "aspose-email" % "4.8.0-jdk17"

Unfortunately it will to another error caused by SBT thinking the POM file is located at aspose-email-4.8.0-jdk17.pom , while it should instead be aspose-email-4.8.0.pom .

[info] Resolving com.aspose#aspose-email;4.8.0-jdk17 ...
[warn]  module not found: com.aspose#aspose-email;4.8.0-jdk17
[warn] ==== local: tried
[warn]   /Users/ganeshwara/.ivy2/local/com.aspose/aspose-email/4.8.0-jdk17/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/com/aspose/aspose-email/4.8.0-jdk17/aspose-email-4.8.0-jdk17.pom
[warn] ==== Aspose: tried
[warn]   http://maven.aspose.com/artifactory/simple/ext-release-local/com/aspose/aspose-email/4.8.0-jdk17/aspose-email-4.8.0-jdk17.pom
[info] Resolving net.sf.proguard#proguard-base;5.1 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.aspose#aspose-email;4.8.0-jdk17: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Unresolved dependencies path:
[warn]    com.aspose:aspose-email:4.8.0-jdk17 (/Users/ganeshwara/DropMyEmail/backup-server/project/Build.scala#L290)
[warn]      +- Dropmysite:common_2.11:1.0-296020c84e74fa1fd65cd5361b563519ff9c4a5d
sbt.ResolveException: unresolved dependency: com.aspose#aspose-email;4.8.0-jdk17: not found

I think if you look into the repo , you'll see that the problem is due to differing naming convention - where the jarfile is postfixed with the intended JDK version but the POM file is not.

After some googling, I've found that Maven actually has an optional extra coordinate, the classifier , which is appended just after the version number ( source ).

To use it in sbt, you should define your dependency as

"com.aspose" % "aspose-email" % "4.8.0" classifier "jdk17"

( source )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM