使用maven构建一个scala应用程序(混合了java源代码)

Mic*_*ale 63 java maven-2 scala

我有一个应用程序,我希望混合Java和Scala源(实际上它将Java应用程序迁移到scala - 但有时一点).

我可以在IDE中使这项工作很好,非常好.但是我不知道怎么用maven做这个 - scalac可以编译java和scala交织在一起,但是如何为模块设置maven?

另外,我的scala源是否必须是与java不同的文件夹?

Mic*_*ale 39

使用maven scala插件,如下所示的配置将适用于混合java和scala源的项目(scala源当然位于/ scala目录中,如其他人所述).

你可以运行运行mvn编译,测试等...它将全部正常工作.非常好(它会自动运行scalac).

对于一个出色的IDE,IntelliJ 8可以很好地工作:添加scala插件,然后添加一个scala facet,然后调整scala的编译设置以首先运行scalac(如果你有scala和java源的循环依赖关键,则很关键).

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>demo</groupId>
<artifactId>scala-java-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>scala-java-app</name>
<repositories>
    <repository>
        <id>scala-tools.org</id>
        <name>Scala-tools Maven2 Repository</name>
        <url>http://scala-tools.org/repo-releases</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>scala-tools.org</id>
        <name>Scala-tools Maven2 Repository</name>
        <url>http://scala-tools.org/repo-releases</url>
    </pluginRepository>
</pluginRepositories>
<build>
    <plugins>
        <plugin>
            <groupId>org.scala-tools</groupId>
            <artifactId>maven-scala-plugin</artifactId>
            <executions>

                <execution>
                    <id>compile</id>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                    <phase>compile</phase>
                </execution>
                <execution>
                    <id>test-compile</id>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                    <phase>test-compile</phase>
                </execution>
                <execution>
                   <phase>process-resources</phase>
                   <goals>
                     <goal>compile</goal>
                   </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
    </plugins>  
</build>
<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.7.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

  • 我知道这篇文章很老但仍然出现在Google上,所以我会说你不再需要添加scala-tools存储库了.你需要的所有东西都在中央. (13认同)

sbl*_*ndy 12

是的,scala部分必须位于单独的模块和src/main/scala目录中.Maven认为像这样的混合来源是异端邪说.

您可以通过导入scala maven插件来启用scala编译.在"用法"页作为一个很好的例子.

  • 首先,Java和Scala文件可以位于同一个模块中.第二,它们也可以在同一个源目录中.你只需要设置scala插件的maven选项配置 - > sourceDir来告诉maven源文件的位置. (2认同)

lin*_*lof 8

我曾经问过一个非常类似的问题,关于如何在Maven项目中包含非Java代码.答案的要点是在src下为每种编程语言设置一个不同的目录,并查找/编写一个知道如何处理每个编程语言的Maven插件.例如:

src/
|-- main
|   |-- bin
|   |-- sh
|   |-- sql
|   |-- scala
|   |-- java
|   `-- resources
|-- site
...
Run Code Online (Sandbox Code Playgroud)