[英]SBT local Maven repository dependency
Scala Play應用程序遇到了一些麻煩,該應用程序依賴於使用Gradle部署到本地Maven存儲庫的Java庫。 我已經設置了一個包含一個類的簡單Gradle Java模塊和一個使用該類的簡單Scala Play項目的測試項目。 Java類如下所示:
public class TestClass {
public String testMethod(){
return "Some content we will change later.";
}
}
使用build.gradle設置將JAR部署到本地Maven存儲庫:
apply plugin: 'java'
apply plugin: 'maven'
sourceCompatibility = 1.7
project.group = 'play-update-maven-snapshot'
version = '1.0-SNAPSHOT'
運行gradle install
將JAR放入本地存儲庫中:
$ ls ~/.m2/repository/play-update-maven-snapshot/gradle-java/1.0-SNAPSHOT/
gradle-java-1.0-SNAPSHOT.jar maven-metadata-local.xml
gradle-java-1.0-SNAPSHOT.pom
在Scala / Play / SBT端,build.properties更新為:
sbt.version=0.13.1
要獲取https://github.com/sbt/sbt/issues/321中記錄的更改。
根據當前的SBT文檔,配置了build.sbt以便從本地Maven存儲庫中獲取工件:
name := "play-scala"
version := "1.0-SNAPSHOT"
resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
libraryDependencies ++= Seq(
jdbc,
anorm,
cache
)
libraryDependencies+= "play-update-maven-snapshot" % "gradle-java" % "1.0-SNAPSHOT"
play.Project.playScalaSettings
並且Application.scala更新為:
package controllers
import play.api.mvc._
object Application extends Controller {
def index = Action {
Ok(views.html.index(new TestClass().testMethod()))
}
}
還有一個被入侵的index.scala.html,可以簡單地顯示傳遞給它的內容:
@(message: String)
@main("Welcome to Play") {
message
}
我們有簡單的測試環境。 開始播放不會顯示任何依存關系錯誤:
$ play run
[info] Loading project definition from /<redacted>/play-update-maven-snapshot/play-scala/project
[info] Set current project to play-scala (in build file:/<redacted>/play-update-maven-snapshot/play-scala/)
[info] Updating {file:/<redacted>/play-update-maven-snapshot/play-scala/}play-scala...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Ctrl+D to stop and go back to the console...)
不幸的是訪問localhost:9000給出以下信息:
[info] Compiling 5 Scala sources and 1 Java source to /<redacted>/play-update-maven-snapshot/play-scala/target/scala-2.10/classes...
[error] /<redacted>/play-update-maven-snapshot/play-scala/app/controllers/Application.scala:8: not found: type TestClass
[error] Ok(views.html.index(new TestClass().testMethod()))
感覺這可能與上面引用的舊版SBT / Ivy緩存本地SNAPSHOT有關。 但是,使用rm -Rf ~/.ivy2/cache/play-update-maven-snapshot
刪除常春藤緩存似乎沒有任何作用。
任何指針將不勝感激。 有一個GitHub項目,其源代碼在這里: https : //github.com/timfulmer/play-update-maven-snapshot 。
編輯1:
確保JAR實際上在本地倉庫中:
$ ls -n ~/.m2/repository/play-update-maven-snapshot/gradle-java/1.0-SNAPSHOT/gradle-java-1.0-SNAPSHOT.jar
-rw-r--r-- 1 501 20 634 Feb 4 11:53 /Users/<redacted>/.m2/repository/play-update-maven-snapshot/gradle-java/1.0-SNAPSHOT/gradle-java-1.0-SNAPSHOT.jar
從更新build.sbt
resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
至
resolvers += Resolver.mavenLocal
仍然沒有喜悅。
編輯2:
真的絕望了:)
$ jar xvf ~/.m2/repository/play-update-maven-snapshot/gradle-java/1.0-SNAPSHOT/gradle-java-1.0-SNAPSHOT.jar
created: META-INF/
inflated: META-INF/MANIFEST.MF
inflated: TestClass.class
$ cat ./TestClass.class
????3
<init>()VCodeLineNumberTableLocalVariableTablethis
LTestClass;
testMethod()Ljava/lang/String;
SourceFileTestClass.java
"Some content we will change later.
TestClassjava/lang/Object!/*??
看起來直到本地Maven回購協議都正確。
謝謝,
-蒂姆
Dunno(如果這是早期版本的堆棧有問題),但是在具有完全相同設置的最新項目中,我沒有再遇到此問題。 那時,一旦設置不正確,就感覺路徑中的某些內容正在被緩存。
小心按照最新版本給出的順序執行上述步驟似乎會使一切變得愉快。
如果您確實遇到了這種情況,請參閱上面評論中的建議。 Aditya Pawade對隱藏討厭文件的位置有一些想法。
干杯,
-蒂姆
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.