我们正在为我们的混合Java / Scala项目使用scala-maven-plugin。一般来说工作得很好,但是我们发现在多模块项目中我们无法弄清楚如何在子目录中进行'mvn compile'。
我无法将完整的源代码发布到IP限制,但在我搜索可能的其他项目时 已经解决了这个问题我只是设法提出了完全相同问题的其他项目。这是一个 例如:https://github.com/buildlackey/scala-multimodule-sample-project.git
上面的项目在目录下面有三个子模块,用于保存根pom.xml: cats , dogs 和 web-application 。 如果你git克隆上面的url,然后cd到'scala-multimodule-sample-project',你会看到它构建。 现在,如果我进入子模块'狗'并进行'mvn编译',我会看到消息:
[INFO] No sources to compile
但是有来源可以编译!该插件只是找不到它们。
这与我的多模块项目相同。我不能发布我们的东西的整个来源..但在这里 是我们顶级pom.xml的相关配置:
<build>
<sourceDirectory>${basedir}/src/main/scala</sourceDirectory>
<testSourceDirectory>${basedir}/src/test/scala</testSourceDirectory>
<!-- Compiling scala code -->
<plugin>
<!-- see http://davidb.github.com/scala-maven-plugin -->
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<id>scala-compile</id>
<phase>process-resources</phase>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile</id>
<phase>process-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
根据插件的文档(http://davidb.github.io/scala-maven-plugin/add-source-mojo.html) 有一些可选参数可以传递给add-source目标:即 sourceDir 和 testSourceDir
然而,我无法弄清楚如何通过这些。也许这些参数是成功的关键?
最后,一种被证明是成功的愚蠢的解决方法是将scala-maven-plugin的相同配置复制到每个子模块目录中,我想在那里进行限制到该子模块的编译。显然,这是一种非干燥的,不受欢迎的方法。
如果有人能提出一个好的解决方案,我将非常感激。
谢谢!
答案 0 :(得分:3)
我在https://github.com/davidB/scala-maven-plugin/tree/master/samples/prj_multi_modules
上传了一份工作样本重复的解决方案是常用的。
DRY的替代方法是在<pluginManagement>
部分声明插件的配置,然后在<build><plugins><plugin>
下为要启用插件的项目添加groupId + artifactId。您可以将它添加到modules'pom.xml或每个模块继承的父级pom.xml中。
您还可以使用<dependencyManagement>
来避免重复依赖项的版本。
addSource
是注册其他源目录并为IDE和其他插件公开它。
答案 1 :(得分:0)
我认为你的scala-multimodule-sample-project pom.xml文件中的sourceDir值不正确。
我将sourceDir更改为src / main / scala,并在mvn编译之后输出以下内容:
...
[INFO] skip non existing resourceDirectory /home/grzesiek/dev/project/temp/scala-multimodule-sample-project/cats/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ cats ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-scala-plugin:2.15.2:compile (default) @ cats ---
[INFO] Checking for multiple versions of scala
[INFO] includes = [**/*.java,**/*.scala,]
[INFO] excludes = []
[INFO] /home/grzesiek/dev/project/temp/scala-multimodule-sample-project/cats/src/main/scala:-1: info: compiling
[INFO] Compiling 1 source files to /home/grzesiek/dev/project/temp/scala-multimodule-sample-project/cats/target/classes at 1453711735781
...