在maven包生成的sources jar中包含scala类

时间:2016-11-11 18:21:07

标签: scala maven

添加到pom.xml的以下插件允许在执行mvn package时创建source-jar:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <executions>
      <execution>
        <id>attach-sources</id>
        <goals>
          <goal>jar</goal>
        </goals>
      </execution>
    </executions>
    </plugin>
  </plugins>

scala-maven-plugin的用法是:

  <plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>scala-maven-plugin</artifactId>
    <version>3.2.1</version>
    <executions>
      <execution>
        <goals>
          <goal>compile</goal>
          <goal>testCompile</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <jvmArgs>
        <jvmArg>-Xmx12g</jvmArg>
      </jvmArgs>
      <args>
        <arg>-feature</arg>
        <arg>-deprecation</arg>
        <arg>-target:jvm-1.7</arg>
      </args>
    </configuration>
  </plugin>

但是只包含java个来源:scala来源被遗漏了。请注意,我们使用的是标准的maven目录布局。特别是我们在这里有scala来源:

  src/main/scala

那么 - maven-source-plugin还有其他选项可以鼓励它邀请scala课程参与吗?或者使用不同的scala特定插件和/或选项来获取它们?

1 个答案:

答案 0 :(得分:3)

jarMaven Source Plugin目标会将Maven项目的所有来源捆绑到JAR中。您可以选择要在这些源文件夹中包含或排除的内容(使用includesexcludes参数),但不能向其添加全新的源文件夹;它们必须作为Maven项目本身的源文件夹添加。

当您有pure Scala project时,src/main/scalasrc/test/scala被声明为源文件夹,因为您将拥有:

<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
在您的POM中

,覆盖默认src/main/javasrc/test/java。因此,Maven Source Plugin会正确添加这两个文件夹中的源代码而无需额外配置。

但如果您有mixed Java / Scala project,则<sourceDirectory><testSourceDirectory>元素通常会保留为默认值。这对于使用插件编译或运行Scala代码没有任何问题,因为它在${project.build.sourceDirectory}/../scala中默认查找文件。但是,其他不相关的Maven插件无法知道这些新文件夹。

要解决此问题,该插件会提供add-source目标,该目标会将src/main/scalasrc/test/scala作为源和测试源目录添加到Maven项目中,从而使它们可用于其他插件依赖于源目录,如Maven Source Plugin。因此,您应该将POM更改为:

<plugin>
  <groupId>net.alchim31.maven</groupId>
  <artifactId>scala-maven-plugin</artifactId>
  <version>3.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>add-source</goal>
        <goal>compile</goal>
        <goal>testCompile</goal>
      </goals>
    </execution>
  </executions>
  <!-- rest of configuration -->
</plugin>