SBT зависит от RootProject: не компилирует зависимость
У меня довольно простая конфигурация:
//lazy val bananaRdfProject = RootProject( uri("git://github.com:stample/banana-rdf.git#"+bananaGitBranch) )
// lazy val bananaRdfProject = RootProject( uri("https://github.com/stample/banana-rdf.git#"+bananaGitBranch) )
// lazy val bananaRdfProject = ProjectRef( uri("https://github.com/stample/banana-rdf.git#"+bananaGitBranch) ,"banana-rdf")
lazy val bananaRdfProject = RootProject( file("../banana-rdf") )
lazy val main = play.Project(appName, appVersion, appDependencies).settings(...)
.dependsOn( bananaRdfProject )
Я попытался использовать 4 различных объявления проекта выше для bananaRdfProject.
Как я могу редактировать этот банано-rdf локально, я хочу, чтобы он перекомпилировался каждый раз, когда я строил свой игровой проект, так что мне не нужно публиковать бананы-rdf...
Но когда я пытаюсь скомпилировать свой основной проект игры, в котором используется банан-rdf, он не компилирует banana-rdf, а пытается скомпилировать основной проект: компиляция не выполняется, потому что в классеpath отсутствуют классы банана-rdf.
[email protected]:rww-play (master *%)$ ./play.old/play
[info] Loading project definition from /home/sebastien/Bureau/rww-play/project
[warn] there were 1 deprecation warning(s); re-run with -deprecation for details
[warn] one warning found
[info] Loading project definition from /home/sebastien/Bureau/banana-rdf/project
[info] Updating {file:/home/sebastien/Bureau/banana-rdf/project/}banana-rdf-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 2 Scala sources to /home/sebastien/Bureau/banana-rdf/project/target/scala-2.10/sbt-0.13/classes...
[warn] there were 11 deprecation warning(s); re-run with -deprecation for details
[warn] there were 2 feature warning(s); re-run with -feature for details
[warn] two warnings found
[info] Set current project to RWWeb (in build file:/home/sebastien/Bureau/rww-play/)
_
_ __ | | __ _ _ _
| '_ \| |/ _' | || |
| __/|_|\____|\__ /
|_| |__/
play 2.2-TLS built with Scala 2.10.3-RC3 (running Java 1.7.0_45), http://www.playframework.com
> Type "help play" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.
[RWWeb] $ compile
[info] Updating {file:/home/sebastien/Bureau/banana-rdf/}banana...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Updating {file:/home/sebastien/Bureau/rww-play/}RWWeb...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 53 Scala sources and 1 Java source to /home/sebastien/Bureau/rww-play/target/scala-2.10/classes...
[error] /home/sebastien/Bureau/rww-play/app/controllers/CORSProxy.scala:4: object banana is not a member of package org.w3
[error] import org.w3.banana.plantain.Plantain
[error] ^
[error] /home/sebastien/Bureau/rww-play/app/controllers/CORSProxy.scala:7: not found: type Plantain
[error] object CORSProxy extends org.www.readwriteweb.play.CORSProxy[Plantain](webClient)
.................
Не предполагается ли компиляция банана-rdf, прежде чем пытаться скомпилировать мой основной проект? Если нет, то какая точка зависит от внешнего RootProject?
Ответы
Ответ 1
Ссылка на проект RootProject(file("../banana-rdf"))
просто ссылается на корневой проект, и вам действительно нужна ссылка на подпроект banana-rdf
(в подкаталоге rdf
).
Доступные подпроекты определены в https://github.com/w3c/banana-rdf/blob/master/project/build.scala. Есть несколько:
[main]> projects
[info] In file:/Users/jacek/sandbox/stackoverflow/19832655/
[info] * main
[info] In https://github.com/w3c/banana-rdf.git
[info] banana
[info] banana-jena
[info] banana-rdf
[info] banana-rdf-test-suite
[info] banana-sesame
[info] examples
[info] experimental
[info] ldp
[info] patch
Чтобы ссылаться на banana-rdf
, вы должны использовать следующий ProjectRef
, указывающий на правый модуль (подпроект) в конфигурации сборки. Примечание ProjectRef
, а также имя подпроекта - banana-rdf
.
lazy val bananaRdfProject =
ProjectRef(uri("https://github.com/w3c/banana-rdf.git"), "banana-rdf")
С помощью ProjectRef
вы сможете разрешить любые типы, определенные в подпроекте banana-rdf
.
Ответ 2
Существует различие между совокупными проектами и dependOn. Я думаю, вам нужно объединить, чтобы все проекты строились вместе. DependOn только гарантирует, что классы из этого проекта находятся на пути к классам, но это, конечно, может быть старым артефактом, если вы его еще не создали. Ознакомьтесь с документами sbt для получения дополнительной информации: http://www.scala-sbt.org/0.12.3/docs/Getting-Started/Multi-Project.html