目前我正在构建一个连接到hadoop jobtracker的Play项目(v2.2.3),这意味着我需要使用hadoop lib jars构建它
当我使用hadoop 1.x
时,它工作正常现在我的项目想要支持hadoop1.x和hadoop2.x。但是由于h1和h2给出了不同的lib jar,我想分别用两组依赖项(hadoop1.x和hadoop 2.x)构建我的Play项目,并生成两个可部署的zip,分别可以在h1和h2上运行。 / p>
当我正在探索各种方式时,我找到了一个最接近的方法: 在build.sbt中,我使用相同的根目录(它是项目的根目录)创建了两个子项目,如:
lazy val h2 = Project("h2",file(".")).settings(
version := "h2",
libraryDependencies += "some hadoop2 dependency"
)
lazy val h1 = Project("h1",file(".")).settings(
version := "h1",
libraryDependencies += "some hadoop1 dependency"
)
但是当exec" play compile" :
overlapping output directories : proj_root/target
我尝试通过更改输出目录来解决它,例如:
lazy val h1 = Project("h1",file(".")).settings(
version := "h1",
libraryDependencies += "some hadoop1 dependency"
target in Compile := file("some_my_own_dir"),
)
但它不起作用。我无法更改项目的输出目录,错误消息保持不变。
所以有关同时构建具有两组不同依赖关系的项目的建议(或选择一组以我/用户指示构建),以便我/用户不必手动编辑构建名.bst?或者有关改变播放项目输出目标的暂定解决方案的任何建议?
我已经被困在这个问题好几天了,并且对此感到疯狂。谢谢你的帮助!
答案 0 :(得分:0)
libraryDependencies ++= if (sys.props.get("hadoop.version").exists(_ == "1")) Seq(
// hadoop 1 dependencies
) else Seq(
// hadoop 2 dependencies
)
然后:
$ activator -Dhadoop.version=1 dist
$ activator -Dhadoop.version=2 dist