scala-maven-plugin mixed compile不包含src / main / java而且找不到java类

时间:2017-08-05 09:41:02

标签: scala maven intellij-idea

的pom.xml:

  <build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>${maven.compiler.source}</source>
            <target>${maven.compiler.target}</target>
        </configuration>
        <executions>
            <execution>
                <id>default-compile</id>
                <phase>compile</phase>
            </execution>
        </executions>
    </plugin>

  <plugin>
    <!-- see http://davidb.github.com/scala-maven-plugin -->
    <groupId>net.alchim31.maven</groupId>
    <artifactId>scala-maven-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
      <execution>

        <goals>
          <goal>compile</goal>
          <goal>testCompile</goal>
        </goals>
        <configuration>
          <args>
            <arg>-dependencyfile</arg>
            <arg>${project.build.directory}/.scala_dependencies</arg>
          </args>
        </configuration>
      </execution>
    </executions>
  </plugin>

代码结构:

src/main/java
          Hello.java
src/main/scala #will reference the class under /src/main/java
          App.scala

IDE:Intellij IDEA 2017.2.1,JDK:java8

问题:    当我通过intellij运行maven编译时,它总是显示以下错误,这意味着它无法找到Hello.class。

问题:

  1. 为什么这个pom.xml不起作用?我检查了scal-maven-plugin的文档,布局应该有效,但事实并非如此。

  2. 我发现如果我通过build-helper-maven-plugin将src / main / java添加为源目录,它将会起作用。这可以解释第一个问题,但我意识到在maven编译之前,我通过Intellij运行App.scala,所以Hello.java已经编译成类,我可以在src / main / target /下看到它课程。那么为什么scala-maven-plugin在src / main / target / classes下找不到类?

1 个答案:

答案 0 :(得分:1)

  • 就像问题中链接的文档/示例一样,删除 <sourceDirectory>src/main/scala</sourceDirectory> <testSourceDirectory>src/test/scala</testSourceDirectory>
  • 或者将它们设置为src /.../ java(默认值),不需要使用build-helper-maven-plugin
  • 或将* .java和* .scala放在同一目录下(我最喜欢的)

在双混合java / scala中(scala依赖于java和java依赖于scala),scala编译器针对java源运行,而不是来自二进制。

如果你想&#34;通知&#34; scala源代码的IDE在src /.../ scala&#34;下添加&#34; <goal>add-source</goal>

请参阅add-source