我的scala-maven-plugin与多模块项目的配置不允许我在子目录

时间:2016-01-23 08:06:12

标签: scala maven build

我们正在为我们的混合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的相同配置复制到每个子模块目录中,我想在那里进行限制到该子模块的编译。显然,这是一种非干燥的,不受欢迎的方法。

如果有人能提出一个好的解决方案,我将非常感激。

谢谢!

2 个答案:

答案 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
...