Playframework 使用SBT生成Eclipse项目

Playframework 使用SBT生成Eclipse项目,playframework,sbt,typesafe-activator,sbteclipse,Playframework,Sbt,Typesafe Activator,Sbteclipse,我正在从Activator2.3.x升级到2.4.x(最终升级到2.5.x)。作为迁移的一部分,我不能再使用activatoreclipse命令从Play应用程序生成eclipse项目 我在一个团队工作,其中一些团队使用IntelliJ。因此,我不能对每个项目都进行这些更改,因为这对IntelliJ用户来说是无用的,而且使用项目源代码进行版本转换是不合适的 我一直在遵循指示。以下是我迄今为止采取的迁移步骤: 将project/plugins.sbt更改为使用2.4.6 在project/appl

我正在从Activator2.3.x升级到2.4.x(最终升级到2.5.x)。作为迁移的一部分,我不能再使用
activatoreclipse
命令从Play应用程序生成eclipse项目

我在一个团队工作,其中一些团队使用IntelliJ。因此,我不能对每个项目都进行这些更改,因为这对IntelliJ用户来说是无用的,而且使用项目源代码进行版本转换是不合适的

我一直在遵循指示。以下是我迄今为止采取的迁移步骤:

  • 将project/plugins.sbt更改为使用2.4.6
  • 在project/application.conf中,将
    evolutionplugin=disabled
    更改为
    play.evolutions.enabled=false
  • 在project/build.sbt中,从
    libraryDependencies
  • Eclipse用户
    A.下载并安装SBT:
    -解压缩到
    C:\dev\.sbt\0.13

    B创建SBT_主环境变量 -
    SBT\u HOME=C:\dev\.SBT\0.13

    C将
    %SBT\u HOME%\bin添加到
    路径

    -
    PATH=…;%SBT_HOME%\bin
    D在
    %SBT\u HOME%

    -
    C:\dev\.sbt\0.13\插件

    E在插件目录中创建plugins.sbt文件
    -
    C:\dev\.sbt\0.13\plugins\plugins.sbt

    F将以下行添加到全局插件。sbt:
    -
    addSbtPlugin(“com.typesafe.sbteclipse“%”sbteclipse插件“%”4.0.0”)

    G编辑
    %SBT\u HOME%\conf\sbtopts
    以指定SBT插件目录:
    -
    -sbt目录C:/dev/.sbt/0.13/插件

    H编辑
    %SBT\u HOME%\conf\sbtopts
    以指定SBT启动目录:
    -
    -sbt boot C:/dev/.sbt/0.13/plugins/boot

    我在
    %sbt\u HOME%
  • 此时,我应该能够创建一个Eclipse项目,但它无法解析sbteclipse:

    [warn]  ::::::::::::::::::::::::::::::::::::::::::::::
    [warn]  ::          UNRESOLVED DEPENDENCIES         ::
    [warn]  ::::::::::::::::::::::::::::::::::::::::::::::
    [warn]  :: com.typesafe.sbteclipse#sbteclipse-plugin;4.0.0: not found
    [warn]  ::::::::::::::::::::::::::::::::::::::::::::::
    [warn]
    [warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
    [warn]          com.typesafe.sbteclipse:sbteclipse-plugin:4.0.0 (scalaVersion=2.11, sbtVersion=0.13)
    [warn]
    [warn]  Note: Unresolved dependencies path:
    [warn]          com.typesafe.sbteclipse:sbteclipse-plugin:4.0.0 (scalaVersion=2.11, sbtVersion=0.13) (C:\dev\.sbt\0.13\plugins\plugins.sbt#L2-3)
    [warn]            +- gateway-api:gateway-api_2.11:1.0-SNAPSHOT
    sbt.ResolveException: unresolved dependency: com.typesafe.sbteclipse#sbteclipse-plugin;4.0.0: not found
            at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:313)
            at sbt.IvyActions$$anonfun$updateEither$1.apply(IvyActions.scala:191)
            at sbt.IvyActions$$anonfun$updateEither$1.apply(IvyActions.scala:168)
            at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:156)
            at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:156)
            at sbt.IvySbt$$anonfun$withIvy$1.apply(Ivy.scala:133)
            at sbt.IvySbt.sbt$IvySbt$$action$1(Ivy.scala:57)
            at sbt.IvySbt$$anon$4.call(Ivy.scala:65)
            at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:93)
            at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:78)
            at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:97)
            at xsbt.boot.Using$.withResource(Using.scala:10)
            at xsbt.boot.Using$.apply(Using.scala:9)
            at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:58)
            at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:48)
            at xsbt.boot.Locks$.apply0(Locks.scala:31)
            at xsbt.boot.Locks$.apply(Locks.scala:28)
            at sbt.IvySbt.withDefaultLogger(Ivy.scala:65)
            at sbt.IvySbt.withIvy(Ivy.scala:128)
            at sbt.IvySbt.withIvy(Ivy.scala:125)
            at sbt.IvySbt$Module.withModule(Ivy.scala:156)
            at sbt.IvyActions$.updateEither(IvyActions.scala:168)
            at sbt.Classpaths$$anonfun$sbt$Classpaths$$work$1$1.apply(Defaults.scala:1439)
            at sbt.Classpaths$$anonfun$sbt$Classpaths$$work$1$1.apply(Defaults.scala:1435)
            at sbt.Classpaths$$anonfun$doWork$1$1$$anonfun$90.apply(Defaults.scala:1470)
            at sbt.Classpaths$$anonfun$doWork$1$1$$anonfun$90.apply(Defaults.scala:1468)
            at sbt.Tracked$$anonfun$lastOutput$1.apply(Tracked.scala:37)
            at sbt.Classpaths$$anonfun$doWork$1$1.apply(Defaults.scala:1473)
            at sbt.Classpaths$$anonfun$doWork$1$1.apply(Defaults.scala:1467)
            at sbt.Tracked$$anonfun$inputChanged$1.apply(Tracked.scala:60)
            at sbt.Classpaths$.cachedUpdate(Defaults.scala:1490)
            at sbt.Classpaths$$anonfun$updateTask$1.apply(Defaults.scala:1417)
            at sbt.Classpaths$$anonfun$updateTask$1.apply(Defaults.scala:1369)
            at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
            at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
            at sbt.std.Transform$$anon$4.work(System.scala:63)
            at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
            at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
            at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
            at sbt.Execute.work(Execute.scala:237)
            at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
            at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
            at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
            at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
            at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
            at java.lang.Thread.run(Thread.java:745)
    [error] (*:update) sbt.ResolveException: unresolved dependency: com.typesafe.sbteclipse#sbteclipse-plugin;4.0.0: not found
    [error] Could not create Eclipse project files:
    [error] Error evaluating task 'scalacOptions': error
    [error] Error evaluating task 'externalDependencyClasspath': error
    
    因此,您可以从上面概述的步骤中看到,我试图允许我们Eclipse用户从Play服务创建项目。我下载了SBT,将其解压缩到我的dev文件夹中,并开始在那里进行全局更改

    C:\dev\.sbt\0.13\plugins\plugins.sbt的内容

    // Support Play in Eclipse
    addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
    
    C:\dev\.sbt\0.13\sbteclipse.sbt的内容

    import com.typesafe.sbteclipse.plugin.EclipsePlugin.EclipseKeys
    
    // Download Source and Javadocs with binaries
    EclipseKeys.withSource := true
    EclipseKeys.withJavadoc := true
    
    // Compile the project before generating Eclipse files, so that generated .scala or .class files for views and routes are present
    EclipseKeys.preTasks := Seq(compile in Compile)
    
    // Java project. Don't expect Scala IDE
    EclipseKeys.projectFlavor := EclipseProjectFlavor.Java           
    
    // Use .class files instead of generated .scala files for views and routes
    EclipseKeys.createSrc := EclipseCreateSrc.ValueSet(EclipseCreateSrc.ManagedClasses, EclipseCreateSrc.ManagedResources)  
    
    C:\dev\.sbt\0.13\conf\sbtopts的内容

    # ------------------------------------------------ #
    #  The SBT Configuration file.                     #
    # ------------------------------------------------ #
    
    
    # Disable ANSI color codes
    #
    #-no-colors
    
    # Starts sbt even if the current directory contains no sbt project.
    #
    -sbt-create
    
    # Path to global settings/plugins directory (default: ~/.sbt)
    #
    #-sbt-dir   /etc/sbt
    -sbt-dir    C:/dev/.sbt/0.13/plugins
    
    # Path to shared boot directory (default: ~/.sbt/boot in 0.11 series)
    #
    -sbt-boot   C:/dev/.sbt/0.13/plugins/boot
    
    # Path to local Ivy repository (default: ~/.ivy2)
    #
    #-ivy ~/.ivy2
    
    # set memory options
    #
    #-mem   <integer>  
    
    # Use local caches for projects, no sharing.
    #
    #-no-share
    
    # Put SBT in offline mode.
    #
    #-offline
    
    # Sets the SBT version to use.
    #-sbt-version  0.11.3
    
    # Scala version (default: latest release)
    #
    #-scala-home <path>        
    #-scala-version <version>
    
    # java version (default: java from PATH, currently $(java -version |& grep version))
    #
    #-java-home <path>
    
    。--------------------------------------------------------------#
    #SBT配置文件#
    # ------------------------------------------------ #
    #禁用ANSI颜色代码
    #
    #-没有颜色
    #即使当前目录不包含sbt项目,也会启动sbt。
    #
    -sbt创建
    #全局设置/插件目录的路径(默认值:~/.sbt)
    #
    #-助理秘书长/工程训练/助理秘书长
    -sbt目录C:/dev/.sbt/0.13/plugins
    #共享启动目录的路径(0.11系列中的默认值:~/.sbt/boot)
    #
    -sbt引导C:/dev/.sbt/0.13/plugins/boot
    #本地常春藤存储库的路径(默认值:~/.ivy2)
    #
    #-常春藤~/.ivy2
    #设置内存选项
    #
    #-记忆
    #对项目使用本地缓存,不共享。
    #
    #-没有份额
    #将SBT置于脱机模式。
    #
    #-离线
    #设置要使用的SBT版本。
    #-sbt版本0.11.3
    #Scala版本(默认:最新版本)
    #
    #-斯卡拉之家酒店
    #-scala版本
    #java版本(默认值:java from PATH,当前为$(java-version |&grep version))
    #
    #-爪哇之家
    
    项目位于
    C:\dev\eclipse\workspace\company\Project
    。在Cygwin中,我导航到该位置并执行
    sbt eclipse
    (或
    activator eclipse
    ,其结果相同),根据我的理解,这应该是可行的。但是,就像我说的,我犯了一个错误,它不起作用

    有人能帮我正确地设置它,这样我就可以为Play服务创建Eclipse项目文件,并继续我愉快的lil迁移旅程吗


    我认为sbteclipse插件正试图使用我系统的scala版本,而不是插件指定并在启动文件夹中提供的版本。

    我最近从Play 2.4迁移到Play 2.5,并在中描述了整个过程。在中,您可以找到如何“电子化”项目

    我没有注意到,您使用的是全局sbt设置。 对于全局sbt设置:

  • 使用以下内容创建c:\dev\.sbt\0.13\plugins\plugins.sbt:

    //Support Play in Eclipse
    addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
    
    import com.typesafe.sbteclipse.plugin.EclipsePlugin.EclipseKeys
    EclipseKeys.preTasks := Seq(compile in Compile)
    EclipseKeys.withSource := true
    EclipseKeys.withJavadoc := true
    
    // Java project. Don't expect Scala IDE
    EclipseKeys.projectFlavor := EclipseProjectFlavor.Java
    
    // Use .class files instead of generated .scala files for views and routes
    EclipseKeys.createSrc := EclipseCreateSrc.ValueSet(EclipseCreateSrc.ManagedClasses, EclipseCreateSrc.ManagedResources)  
    
  • 使用以下内容创建C:\dev\.sbt\sbteclipse.sbt:

    //Support Play in Eclipse
    addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
    
    import com.typesafe.sbteclipse.plugin.EclipsePlugin.EclipseKeys
    EclipseKeys.preTasks := Seq(compile in Compile)
    EclipseKeys.withSource := true
    EclipseKeys.withJavadoc := true
    
    // Java project. Don't expect Scala IDE
    EclipseKeys.projectFlavor := EclipseProjectFlavor.Java
    
    // Use .class files instead of generated .scala files for views and routes
    EclipseKeys.createSrc := EclipseCreateSrc.ValueSet(EclipseCreateSrc.ManagedClasses, EclipseCreateSrc.ManagedResources)  
    
    注意:在我的例子中,不是dev而是我的用户根目录

  • 项目build.sbt:

    import NativePackagerHelper._
    name := """play-server-example"""
    
    version := "1.0-SNAPSHOT"
    
    lazy val root = (project in file(".")).enablePlugins(PlayJava)
    
    scalaVersion := "2.11.8"
    
    resolvers += "Local Maven Repository" at "file:///"+Path.userHome.absolutePath+"/.m2/repository"
    
    libraryDependencies ++= Seq(javaJdbc, cache, javaWs)
    
    注意:最初我使用scalaVersion:=2.11.7,因为这是生成的值,但对于测试,我使用了2.11.8。这对他们两个都有效

  • 我没有更多的选择:没有sbt选项,只有环境变量中的sbt home(就像在我的帖子中一样)


  • 底线:我只做了第1、2、3项来让事情顺利进行。

    虽然我很欣赏这些帖子和链接,但你为每个项目设置了eclipse插件,我明确表示我不能这样做。我需要为每个开发者全局配置sbt。我仍然无法让它工作。我已经更新了我原来的帖子,更新了我在回复你帖子时所做的所有更改。Eclipse用户的步骤应该是相关的。我已经尽可能详细地概述了我所采取的每一步,包括你的建议。另外,感谢您抽出时间提供帮助,我非常感谢。我认为您应该将sbteclipse.sbt从C:\dev\.sbt\0.13移动到C:\dev\.sbtit会产生完全相同的错误。它试图根据我的系统版本scala(2.11)而不是插件版本(2.10)解决sbteclipse问题。它甚至还没有到达拾取和解析sbteclipse.sbt的点,它仍然在尝试加载插件,我在其中尝试使用eclipse命令,在其build.sbt中指定scalaVersion为2.11.8。该版本的scala是sbt在解析时试图使用的