首页 文章

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

提问于
浏览
0

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

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

Questions:

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

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

1 回答

  • 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源运行,而不是来自二进制 .

    如果你想"notify" scala源代码的IDE在src /.../ scala下"add" <goal>add-source</goal>

    add-source

相关问题