首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在由maven包生成的源jar中包括scala类

在由maven包生成的源jar中包括scala类
EN

Stack Overflow用户
提问于 2016-11-11 18:21:07
回答 1查看 1.6K关注 0票数 4

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

代码语言:javascript
运行
复制
  <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的用法是:

代码语言:javascript
运行
复制
  <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源:

代码语言:javascript
运行
复制
  src/main/scala

那么,maven-source-plugin是否还有其他选项来鼓励它邀请scala类参与?或者是另一个特定于scala的插件和/或选项,让他们上船?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 19:05:32

jarMaven源插件目标将将Maven项目的所有源绑定到一个JAR中。您可以选择在这些源文件夹中包含或排除什么(带有includesexcludes参数),但不能向其中添加整个新的源文件夹;必须将它们作为Maven项目本身的源文件夹添加。

当您有一个纯Scala项目时,src/main/scalasrc/test/scala被声明为源文件夹,因为您有:

代码语言:javascript
运行
复制
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>

在POM中,重写默认的src/main/javasrc/test/java。因此,Maven Source插件可以正确地添加这两个文件夹中的源代码,而不需要额外的配置。

但是,当您有一个Java / Scala混合项目时,<sourceDirectory><testSourceDirectory>元素通常保留到它们的默认值。这不会在使用插件编译或运行Scala代码方面产生任何问题,因为它在默认情况下在${project.build.sourceDirectory}/../scala中查找文件。但是,其他不相关的Maven插件不可能知道这些新文件夹。

为了解决这个问题,插件提供了add-source目标,它将src/main/scalasrc/test/scala作为源代码和测试源目录添加到Maven项目中,从而使它们可以用于依赖源目录的其他插件,比如Maven源代码插件。因此,应将POM更改为:

代码语言:javascript
运行
复制
<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>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40553948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档