Получил некоторые проблемы с приложением Scala Play, имеющим зависимость от библиотеки Java, развернутой в локальном репозитории Maven с использованием Gradle. Я установил тестовый проект с простым модулем Gradle Java, содержащим один класс, и простым проектом Scala Play с использованием этого класса. Класс Java выглядит следующим образом:SBT локальная зависимость хранилища Maven
public class TestClass {
public String testMethod(){
return "Some content we will change later.";
}
}
С установкой build.gradle развертывания фляг местного Maven репо:
apply plugin: 'java'
apply plugin: 'maven'
sourceCompatibility = 1.7
project.group = 'play-update-maven-snapshot'
version = '1.0-SNAPSHOT'
gradle install
Запуском капель БАНКИ в местном репо:
$ 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.
С build.sbt настроен в соответствии с текущим Docs 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...)
Посещение локального хоста: 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, упомянутые выше. Однако удаление кеша Ivy с rm -Rf ~/.ivy2/cache/play-update-maven-snapshot
, похоже, ничего не делает.
Любые указатели были бы весьма благодарны. Здесь есть проект GitHub с источником: https://github.com/timfulmer/play-update-maven-snapshot.
Edit 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
Еще не радость.
Edit 2:
Got действительно отчаянным :)
$ 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 репо является правильным.
Спасибо,
- Тим
'~/.m2/repository' по умолчанию Gradle для локального Maven расположения хранилища. Если это не то, что у вас есть, возможно, он нашел другое 'settings.xml', говорящее иначе. –
не уверен, что 'файл: //' необходим. Также существует предопределенный локальный репозиторий maven: 'Resolver.mavenLocal' – 4e6
@ 4e6 Спасибо за указатель. Я обновил вопрос и проект GitHub с вашим предложением. К сожалению, он, похоже, не исправил эту проблему. –