2014-02-05 6 views
1

Получил некоторые проблемы с приложением 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 репо является правильным.

Спасибо,

- Тим

+2

'~/.m2/repository' по умолчанию Gradle для локального Maven расположения хранилища. Если это не то, что у вас есть, возможно, он нашел другое 'settings.xml', говорящее иначе. –

+1

не уверен, что 'файл: //' необходим. Также существует предопределенный локальный репозиторий maven: 'Resolver.mavenLocal' – 4e6

+0

@ 4e6 Спасибо за указатель. Я обновил вопрос и проект GitHub с вашим предложением. К сожалению, он, похоже, не исправил эту проблему. –

ответ

2

Незнайка, если это было проблема с более ранними версиями стека, но на недавнем проект с той же самой установкой я не столкнуться с этой проблемой снова. В то время казалось, что что-то на дорожках стало кэшироваться некорректно.

Будьте осторожны, следуя приведенным выше инструкциям в порядке, указанном в последних версиях, кажется, все радует.

Если вы столкнулись с этим, ознакомьтесь с рекомендациями в комментариях выше. У Aditya Pawade есть некоторые идеи о том, где могут быть скрытые файлы.

Приветствия,

- Tim

Смежные вопросы