Sbt 如何从WSDL生成Java文件并发布它们?
我正在尝试为sbt 0.12.1创建一个插件,该插件将从WSDL生成java文件,编译它们,然后发布jar 我的项目布局如下:Sbt 如何从WSDL生成Java文件并发布它们?,sbt,Sbt,我正在尝试为sbt 0.12.1创建一个插件,该插件将从WSDL生成java文件,编译它们,然后发布jar 我的项目布局如下: ./build.sbt ./project/build.sbt ./project/WsdlBuild.scala ./src/main/wsdl/...many wsdl files... 我正在使用axis生成java文件,build.sbt如下所示: name := "zxtm-api" organization := "com.giltgroupe.zeus
./build.sbt
./project/build.sbt
./project/WsdlBuild.scala
./src/main/wsdl/...many wsdl files...
我正在使用axis生成java文件,build.sbt
如下所示:
name := "zxtm-api"
organization := "com.giltgroupe.zeus"
unmanagedBase <<= baseDirectory { base => base / "wsdl-lib" }
libraryDependencies ++= Seq(
"axis" % "axis-wsdl4j" % "1.2.1",
"commons-logging" % "commons-logging" % "1.0.4",
"commons-discovery" % "commons-discovery" % "0.2",
"log4j" % "log4j" % "1.2.8",
"org.apache.axis" % "axis" % "1.4",
"org.apache.axis" % "axis-ant" % "1.4",
"org.apache.axis" % "axis-jaxrpc" % "1.4",
"org.apache.axis" % "axis-saaj" % "1.4"
)
gilt.zxtm.WsdlBuild.wsdlSettings
因此,我在WsdlBuild.scala
中编写了代码来生成java文件,最后得到如下结果:
object WsdlBuild extends Plugin {
lazy val wsdlSourceDir = SettingKey[File]("wsdl-source-dir")
lazy val wsdlToJava = TaskKey[Unit]("wsdl-to-java")
lazy val managedSrcDir = file("target/src_managed/wsdl")
val wsdlSettings = inConfig(Compile)(Seq(
compile <<= compile dependsOn wsdlToJava,
javaSource := managedSrcDir,
managedSourceDirectories := Seq(managedSrcDir)
)) ++ Seq(
wsdlToJava <<= (wsdlSourceDir, managedSourceDirectories in Compile, state) map {
(wsdlDir, managedDirs, s) =>
// by convention use the first one. Not obvious why there is
// ever more than one
createJavaFromWsdl(wsdlDir, managedDirs.head, s.log)
},
wsdlSourceDir := file("src/main/wsdl")
)
def createJavaFromWsdl(wsdlDir: File, outputDir: File, log: Logger): File = { ... }
对象WsdlBuild扩展插件{
lazy val wsdlSourceDir=SettingKey[File](“wsdl源目录”)
lazy val wsdlToJava=TaskKey[Unit](“wsdl到java”)
lazy val managedSrcDir=文件(“target/src_managed/wsdl”)
val wsdlSettings=inConfig(编译)(序号(
编译生成源代码和资源 在您的情况下,
wsdlSettings
可能如下所示:
val wsdlSettings = inConfig(Compile)(Seq(
sourceGenerators <+= wsdlToJava,
wsdlSourceDir <<= baseDirectory(_ / "src/main/wsdl"),
wsdlToJava <<= (wsdlSourceDir, sourceManaged, streams) map {
(wsdlDir, managedDir, s) =>
createJavaFromWsdl(wsdlDir, managedDir, s.log)
},
)
val wsdlSettings=inConfig(编译)(Seq(
sourceGenerators这个问题已经很老了,尽管这个问题可能仍然与某人有关
在我的例子中,我通过使用sh
脚本解决了一个非常类似的问题,该脚本通过wsimport
完成了WSDL生成的所有脏活(随Java提供)。一个专用的sbt
子项目将其包装为任务,并在编译时执行。这样的子项目可以很容易地插入到任何其他更大的sbt
设置中,您可以在其中添加对它的依赖项
说到这里,GitHub上的一个模板正好说明了这一点:。希望它能为用户节省好几个小时的WSDL和构建工具的时间。如果您觉得有用,请随意使用或改进它!如果有人感兴趣,请发一篇文章,详细描述如下:
val wsdlSettings = inConfig(Compile)(Seq(
sourceGenerators <+= wsdlToJava,
wsdlSourceDir <<= baseDirectory(_ / "src/main/wsdl"),
wsdlToJava <<= (wsdlSourceDir, sourceManaged, streams) map {
(wsdlDir, managedDir, s) =>
createJavaFromWsdl(wsdlDir, managedDir, s.log)
},
)