2016-11-11 53 views
1

以下插件添加到pom.xml允许创建源罐子执行mvn package时:包含在由行家包产生的源罐子Scala类

<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目录布局。特别是我们有阶源位置:

src/main/scala 

所以 - 有没有其他选项的maven-source-plugin鼓励它邀请Scala类参与?或者一个不同的特定于scala的插件和/或选项让它们加载?

+0

您是否在使用'scala-maven-plugin'? – Tunaki

+0

@Tunaki Compliation是好的 - 但即使如此,你的问题是一个很好的问题。我已经更新了OP。 – javadba

+0

尝试将#添加源'添加到'scala-maven-plugin'的执行中。这应该添加'src/main/scala'作为源文件夹,以便'maven-source-plugin'可以使用它。 – Tunaki

回答

1

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

当你有一个pure Scala projectsrc/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插件。因此,您应该将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> 
+0

其实这是*不*工作:只有* java *类正在包括在内。任何额外的提示? – javadba

+0

@javadba我使用Maven 3.3.9在一个简单的Scala/Java项目上测试了这一点,并且我在源代码JAR中正确使用了Scala源代码。你能提供更多的信息,比如你的POM和你的结果吗? – Tunaki

+0

哦!我知道发生了什么事。 sources-jar *仅包含** JAVA **类*。所以它*被包括在内 - 但没有效果(afa scala类源代码)。我想弄清楚如何修复* scala-maven *插件来解决。在任何情况下 - **你的**提示在这里工作正常:(大部分是空的)jar文件**是**包括! – javadba