在使用maven的Play2项目中没有检测到主类

时间:2017-06-14 09:42:33

标签: scala maven intellij-idea playframework playframework-2.0

我正在使用IntelliJ中的maven编译Play2(v2.6)项目,但由于No main class而无法运行。

我已按照here列出的说明操作,但没有为Play项目生成任何来源。

java.lang.RuntimeException: No main class detected.
    at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run 'last compile:run' for the full output.
[error] (compile:run) No main class detected.
[error] Total time: 1 s, completed Jun 14, 2017 12:32:49 PM

当我尝试运行mvn play2:run时,我得到以下堆栈跟踪:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.559 s
[INFO] Finished at: 2017-06-14T23:18:49+03:00
[INFO] Final Memory: 28M/442M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.google.code.play2-maven-plugin:play2-maven-plugin:1.0.0-beta9:run (default-cli) on project mps-play: ?: InvocationTargetException:     akka.util.OptionVal$.contains$extension(Ljava/lang/Object;Ljava/lang/Object;)Z -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.google.code.play2-maven-plugin:play2-maven-plugin:1.0.0-beta9:run (default-cli) on     project mps-play: ?
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
Caused by: org.apache.maven.plugin.MojoExecutionException: ?
    at com.google.code.play2.plugin.Play2RunMojo.internalExecute(Play2RunMojo.java:529)
    at com.google.code.play2.plugin.AbstractPlay2Mojo.execute(AbstractPlay2Mojo.java:139)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    ... 21 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.google.code.play2.provider.play26.Play26Runner.runInDevMode(Play26Runner.java:102)
    at com.google.code.play2.plugin.Play2RunMojo.internalExecute(Play2RunMojo.java:509)
    ... 24 more
Caused by: java.lang.NoSuchMethodError: akka.util.OptionVal$.contains$extension(Ljava/lang/Object;Ljava/lang/Object;)Z
    at akka.stream.impl.LinearTraversalBuilder.offsetOf(TraversalBuilder.scala:780)
    at akka.stream.impl.CompositeTraversalBuilder.add(TraversalBuilder.scala:1267)
    at akka.stream.impl.CompletedTraversalBuilder.add(TraversalBuilder.scala:466)
    at akka.stream.scaladsl.BidiFlow$.fromFlowsMat(BidiFlow.scala:234)
    at akka.stream.scaladsl.BidiFlow$.fromFlows(BidiFlow.scala:261)
    at akka.stream.scaladsl.BidiFlow$.<init>(BidiFlow.scala:188)
    at akka.stream.scaladsl.BidiFlow$.<clinit>(BidiFlow.scala)
    at akka.http.impl.engine.server.HttpServerBluePrint$.<init>(HttpServerBluePrint.scala:71)
    at akka.http.impl.engine.server.HttpServerBluePrint$.<clinit>(HttpServerBluePrint.scala)
    at akka.http.scaladsl.HttpExt.serverLayer(Http.scala:275)
    at akka.http.scaladsl.HttpExt.fuseServerBidiFlow(Http.scala:72)
    at akka.http.scaladsl.HttpExt.bindAndHandle(Http.scala:178)
    at akka.http.scaladsl.HttpExt.bindAndHandleAsync(Http.scala:251)
    at play.core.server.AkkaHttpServer.createServerBinding(AkkaHttpServer.scala:92)
    at play.core.server.AkkaHttpServer.$anonfun$httpServerBinding$1(AkkaHttpServer.scala:109)
    at play.core.server.AkkaHttpServer.$anonfun$httpServerBinding$1$adapted(AkkaHttpServer.scala:109)
    at scala.Option.map(Option.scala:146)
    at play.core.server.AkkaHttpServer.<init>(AkkaHttpServer.scala:109)
    at play.core.server.AkkaHttpServerProvider.createServer(AkkaHttpServer.scala:391)
    at play.core.server.AkkaHttpServerProvider.createServer(AkkaHttpServer.scala:388)
    at play.core.server.DevServerStart$.$anonfun$mainDev$1(DevServerStart.scala:235)
    at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
    at play.core.server.DevServerStart$.mainDev(DevServerStart.scala:59)
    at play.core.server.DevServerStart$.mainDevHttpMode(DevServerStart.scala:49)
    at play.core.server.DevServerStart.mainDevHttpMode(DevServerStart.scala)
    ... 30 more
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

1 个答案:

答案 0 :(得分:0)

这是因为Scala插件sbt版本,激活器和intellij想法之间存在插件版本冲突。新的Intellij试图忽略$ PROJECT_DIR文件,而其他类将conf文件放在那里。

解决方法:将其放入play2_project_settings.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Play2ExcludedModulesSettings">
    <option name="INFO">
      <map>
        <entry key="api">
          <value>
            <ProjectSettingsEntry>
              <option name="confDir" value="$PROJECT_DIR$/api/app" />
              <option name="templateImports">
                <list>
                  <option value="_root_.play.twirl.api.TwirlFeatureImports._" />
                  <option value="_root_.play.twirl.api.TwirlHelperImports._" />
                  <option value="_root_.play.twirl.api.Html" />
                  <option value="_root_.play.twirl.api.JavaScript" />
                  <option value="_root_.play.twirl.api.Txt" />
                  <option value="_root_.play.twirl.api.Xml" />
                  <option value="models._" />
                  <option value="controllers._" />
                  <option value="play.api.i18n._" />
                  <option value="views.xml._" />
                  <option value="play.api.templates.PlayMagic._" />
                  <option value="play.api.mvc._" />
                  <option value="play.api.data._" />
                </list>
              </option>
              <option name="routesImports">
                <list>
                  <option value="controllers.Assets.Asset" />
                </list>
              </option>
              <option name="uri" value="$PROJECT_DIR$/../../../../<custom-project-path>" />
            </ProjectSettingsEntry>
          </value>
        </entry>
        <entry key="chargeback-api">
          <value>
            <ProjectSettingsEntry>
              <option name="playDistrPath" value="$USER_HOME$/.coursier/cache/v1/https/repo1.maven.org/maven2/com/typesafe/play/play_2.12/2.6.11/play_2.12-2.6.11.jar" />
            </ProjectSettingsEntry>
          </value>
        </entry>
      </map>
    </option>
  </component>
</project>

在custom-project-path中放入项目目录的绝对路径,它将像超级按钮一样工作!