')'和'' Spark Framework中的预期错误

时间:2015-02-03 14:26:56

标签: java maven java-8

我试图运行这个例子:

package com.mycompany.app;

import static spark.Spark.*;

/**
 * Hello world!
 *
 */
public class App {
    public static void main(String[] args) {
        get("/hello", (req, res) -> "Hello World");
    }
}

mvn package但是我收到了这个错误:

  

[错误]无法执行目标   org.apache.maven.plugins:Maven的编译器插件:3.1:编译   项目my-app上的(default-compile):编译失败:编译   失败:[错误]   /Users/riccardo.tacconi/riccardo/java/spark/my-app/src/main/java/com/mycompany/app/App.java:[11,27]   ')'预期[错误]   /Users/riccardo.tacconi/riccardo/java/spark/my-app/src/main/java/com/mycompany/app/App.java:[11,35]   非法表达[错误]   /Users/riccardo.tacconi/riccardo/java/spark/my-app/src/main/java/com/mycompany/app/App.java:[11,50]   &#39 ;;'预期[错误] - > [帮助1]

错误:

App.java:[11,27] ')' expected 

指的是req和。之间的(req,res)。

错误:

App.java:[11,35]

指 - >运营商。在我看来,这一行:

get("/hello", (req, res) -> "Hello World");

它不是有效的Java语法。我想知道Maven是否正在使用另一个Java版本(较旧的版本?)进行编译。这是我安装的版本:

» java -version                                                                                                                                                                                   riccardo.tacconi@RTACCONI-01
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

那是pom:

<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>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.sparkjava</groupId>
      <artifactId>spark-core</artifactId>
      <version>2.1</version>
    </dependency>
  </dependencies>
</project>

1 个答案:

答案 0 :(得分:4)

该行

get("/hello", (req, res) -> "Hello World");

是使用Lambda的有效Java 8语法。

您应确保将Maven pom.xml配置为针对Java 8进行编译,而不是针对Java 7或更早版本进行编译。将此设置用于Maven Compiler Plugin

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

此插件的网站describes your problem

  

另请注意,目前默认的源设置为1.5,默认目标设置为1.5,与运行Maven的JDK无关