如何使用sbt将python和Scala文件一起包含在jar文件中?
目标: 使用scala和python文件构建一个jar,并将此jar提供给 pyspark和pyspark能够同时调用scala和python文件。主要 将在使用scala库的python文件中执行 内部使用py4j 如何使用SBT将python文件/包与scala文件一起包含在jar文件中 项目结构(任何工程均可变更) 示例build.sbt(用于子项目) 示例build.sbt(用于父项目) SBT版本=0.13.16 用于构建jar的SBT命令如何使用sbt将python和Scala文件一起包含在jar文件中?,scala,apache-spark,pyspark,sbt,Scala,Apache Spark,Pyspark,Sbt,目标: 使用scala和python文件构建一个jar,并将此jar提供给 pyspark和pyspark能够同时调用scala和python文件。主要 将在使用scala库的python文件中执行 内部使用py4j 如何使用SBT将python文件/包与scala文件一起包含在jar文件中 项目结构(任何工程均可变更) 示例build.sbt(用于子项目) 示例build.sbt(用于父项目) SBT版本=0.13.16 用于构建jar的SBT命令 "project child_pr
"project child_project" assembly
具体问题:
我马上想到的解决方案是将
.py
文件放在main/resources
目录下。这看起来更像是一种黑客行为,但可能是您想要的(尤其是python文件)
更好的解决方案是将main/python
定义为源目录,如中所述:
sbt从非托管源目录
收集源文件,默认情况下由scalaSource
和javaSource
组成。在适当的配置中将目录添加到非托管源目录
,以添加源目录。例如,要添加额外的src作为包含主要源的附加目录
Compile / unmanagedSourceDirectories += baseDirectory.value / "extra-src"
在您的build.sbt
中会出现以下内容:
Compile / unmanagedSourceDirectories += baseDirectory.value / "python"
尝试过这个,但不起作用。我已更新问题以反映此设置(父项目的sbt)。甚至尝试将python文件保存在scala
源代码中,这也不起作用。还添加了有问题的SBT版本(0.13.16)。请重试干净的生成,删除目标目录,刷新SBT并重新启动SBT shell。现在,它似乎尊重设置,但由于编译错误而失败,显然是在构建python文件时。是否可以跳过python文件的编译?每次更改build.sbt
都必须重新启动sbt shell。python文件在哪里?谢谢!python文件位于/parent\u project/child\u project/src/main/python目录中。标记为parent\u project/child\u project/src/main/python
,作为资源文件夹。SBT通常表现得很怪异。有时它将python文件放在jar中,有时不放。无论如何,这就是我采取的方法。使用build.sbt(parent one)Compile+=文件(“/parent\u project/child\u project/src/main/python”)中的非托管源目录中的以下项目定义将python包标记为添加资源。
"project child_project" assembly
Compile / unmanagedSourceDirectories += baseDirectory.value / "extra-src"
Compile / unmanagedSourceDirectories += baseDirectory.value / "python"