2013-10-30 167 views
4

我有以下的(單)斯卡拉類Maven的編譯答覆「沒有源編譯」斯卡拉項目

[  14253 Oct 30 8:44] ./pom.xml 
[  9083 Oct 30 8:30] ./scaladem.iml 
[  102 Oct 29 19:21] ./src 
[  102 Oct 29 19:21] ./src/main 
[  102 Oct 29 19:21] ./src/main/scala 
[  102 Oct 29 19:21] ./src/main/scala/com 
[  102 Oct 29 19:21] ./src/main/scala/com/blazedb 
[  102 Oct 30 8:30] ./src/main/scala/com/blazedb/scalademo 
[  4646 Oct 30 8:30] ./src/main/scala/com/blazedb/scalademo/SDemo.scala 

這裏是POM

<plugin> 
    <groupId>net.alchim31.maven</groupId> 
    <artifactId>scala-maven-plugin</artifactId> 
    <version>3.1.6</version> 
     <configuration> 
      <recompileMode>incremental</recompileMode> 
      <javacArgs> 
      <javacArg>-Xlint:unchecked</javacArg> 
      <javacArg>-Xlint:deprecation</javacArg> 
      </javacArgs> 
     </configuration> 
    <executions> 
     <execution> 
      <id>scala-compile-first</id> 
      <phase>process-resources</phase> 
      <goals> 
       <goal>add-source</goal> 
       <goal>compile</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>scala-test-compile</id> 
      <phase>process-test-resources</phase> 
      <goals> 
       <goal>testCompile</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

的適用部分當我們運行

mvn compile 

我們得到了(注意 '無源'。)

[INFO] Scanning for projects... 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building SDemo 1.0 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ scalademo --- 
[INFO] No sources to compile 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 

更新:運行以下命令

$mvn scala:compile -DdisplayCmd=true 

編譯會成功的時候。

從@badtrumpet的建議,我已經添加了明確如下圖所示

<sourceDirectory>src/main/scala</sourceDirectory> 

而且這部作品甚至MVN編譯。但是,這將是一個混合java/scala項目的問題。

回答

5

下面是一個例子(簡單)的pom.xml我作爲一個位斯卡拉編譯一個樣板的使用,並建立使用Maven:

<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>badtrumpet</groupId> 
<artifactId>blog</artifactId> 
<version>1.0-SNAPSHOT</version> 
<inceptionYear>2013</inceptionYear> 
<packaging>jar</packaging> 
<properties> 
    <scala.version>2.10.2</scala.version> 
    <commons.codec.version>1.8</commons.codec.version> 
    <grizzled.version>1.0.1</grizzled.version> 
    <slf4j-log4j12.version>1.7.5</slf4j-log4j12.version> 
</properties> 

<repositories> 
    <repository> 
     <id>Sonatype repository</id> 
     <name>Sonatype's Maven repository</name> 
     <url>http://oss.sonatype.org/content/groups/public</url> 
    </repository> 
    <repository> 
     <id>scala-tools.org</id> 
     <name>Scala-Tools Maven2 Repository</name> 
     <url>http://scala-tools.org/repo-releases</url> 
    </repository> 
    <repository> 
     <id>milestone.repo.springsource.org</id> 
     <name>repo.springsource.org-milestone</name> 
     <url>https://repo.springsource.org/libs-milestone</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> 

<dependencies> 
    <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-library</artifactId> 
     <version>${scala.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>commons-codec</groupId> 
     <artifactId>commons-codec</artifactId> 
     <version>${commons.codec.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.clapper</groupId> 
     <artifactId>grizzled-slf4j_2.10</artifactId> 
     <version>${grizzled.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${slf4j-log4j12.version}</version> 
    </dependency> 
</dependencies> 

<build> 
    <sourceDirectory>src/main/scala</sourceDirectory> 
    <testSourceDirectory>src/test/scala</testSourceDirectory> 
    <plugins> 
     <plugin> 
      <groupId>org.scala-tools</groupId> 
      <artifactId>maven-scala-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
         <goal>testCompile</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <scalaVersion>${scala.version}</scalaVersion> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<reporting> 
    <plugins> 
     <plugin> 
      <groupId>org.scala-tools</groupId> 
      <artifactId>maven-scala-plugin</artifactId> 
      <configuration> 
       <scalaVersion>${scala.version}</scalaVersion> 
      </configuration> 
     </plugin> 
    </plugins> 
</reporting> 

+0

您明確添加了您是否還有任何Java代碼?在這種情況下,這不會被打破?順便說一句,這隻能爲scala工作:現在mvn編譯「找到」scala ..但我們需要java和scala。 – javadba

+0

你可以在插件部分添加普通的maven編譯器插件,將sourceDirectory改爲/ src/main,確保將你的java代碼放在/ src/main/java下,並將你的scala代碼放在/ src/main/scala下,它應該工作得很好......將在下面的第二個答案中發佈一個適用於我的示例pom片段...... –

+0

即使在「」下添加「 src/main/scala」之後,「mvn編譯「仍然對我有相同的警告。有什麼建議麼? –

1

你是否遵循了maven scala插件主頁中的配置步驟? http://davidb.github.io/scala-maven-plugin/usage.html

看起來好像您已將Scala編譯綁定到流程資源階段。關於沒有源代碼的輸出來自編譯Java的常規Maven編譯器插件。

+0

我已經從該頁面精確複製了pom.xml條目。現在我看到的是他們使用mvn scala:編譯。那麼這是否意味着默認情況下mvn編譯沒有與scala掛鉤? – javadba

+0

嗯。如果你刪除你的生命週期綁定(執行塊),它工作嗎? – johanandren

+0

我評論了生命週期綁定:沒有改變。更新了問題以顯示運行mvn scala:編譯DOES的工作 – javadba

0

額外的源文件夾添加到您的Maven項目你可以使用build-helper-maven-plugin

所以要加src/main/scala,你會配置您的POM以下是源文件:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <id>add-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>${basedir}/src/main/scala</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

對於一個標準的Maven項目,這將意味着現在無論src/main/javasrc/main/scala被行家認爲是源目錄。

1

要混合的Java和Scala,只是確保你的源代碼樹是一樣的東西:

SRC 主要 - java的 - 斯卡拉 - 資源 測試 - java的 - 斯卡拉 - - 資源

等...基本上是一個理智的Maven目錄結構,然後配置你的build一節這樣的:

<build> 
    <sourceDirectory>src/main/</sourceDirectory> 
    <plugins> 
     <plugin> 
      <groupId>org.scala-tools</groupId> 
      <artifactId>maven-scala-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
         <goal>testCompile</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <scalaVersion>${scala.version}</scalaVersion> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
         <goal>testCompile</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
+0

請注意,sourceDirectory設置爲頂級「src」位置... scala源和java源位於子目錄下面... –

0

出於某種原因,正式文件不爲我工作,我必須添加以下 <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions>

所以我的標籤下標籤看起來像這樣: <build> <!-- To define the plugin version in your parent POM --> <pluginManagement> <plugins> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.2.0</version> </plugin> </plugins> </pluginManagement> <!-- To use the plugin goals in your POM or parent POM --> <plugins> <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> </execution> </executions> </plugin> </plugins> </build>