播放框架:包 javax.inject 不存在 [英] Play framework: package javax.inject does not exist

查看:100
本文介绍了播放框架:包 javax.inject 不存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的 Play 2.0 Framework Java 项目中,以下行在 Eclipse 和 sbt 编译步骤中都会产生错误:

In my Play 2.0 Framework Java project, the following line yields errors both in Eclipse and during the sbt compile step:

import javax.inject.*;

我已经将 javax.inject 依赖项添加到我的 build.sbt 文件中:

I already added the javax.inject dependency to my build.sbt file:

libraryDependencies ++= Seq(
    javaCore,
    javaJdbc,
    javaEbean,
    javaWs,
    javaFooBar,
    cache,
    "javax.inject" % "javax.inject" % "1",
    "org.atmosphere" % "atmosphere-play" % "2.1.1"
)

并执行cleanupdate &eclipse with-source=true 疯了:

and executed clean, update & eclipse with-source=true like mad:

[myproject] $ eclipse with-source=true
[info] About to create Eclipse project files for your project(s).
[info] Compiling 3 Scala sources and 12 Java sources to ./myproject/target/scala-2.11/classes...
[error] ./myproject/app/com/elements/legacy/LegacyController.java:3: object inject is not a member of package javax
[error] import javax.inject.*;
[error]        ^
[error] one error found
[error] (compile:compile) Compilation failed
[info] Resolving jline#jline;2.11 ...
[error] Could not create Eclipse project files:
[error] Error evaluating task 'dependencyClasspath': error

我感觉 sbt 不会在无法解决依赖项的情况下抛出错误(例如上面的 javaFooBar).这个怎么激活?

I have the feeling that sbt does not throw errors in case a dependency could not be resolved (e.g. javaFooBar above). How can this be activated?

如何使用 javax.inject 正确构建 Play 2.0 Java 项目?

How can I properly build a Play 2.0 Java project using javax.inject?

非常感谢!

通过以下方式扩展 project/plugins.sbt 中的存储库列表就可以了:

Extending the repository list in project/plugins.sbt in the following way did the trick:

// The repositories
resolvers ++= Seq(
    Resolver.sonatypeRepo("snapshots"),
    Resolver.sonatypeRepo("releases"), 
    Resolver.typesafeRepo("snapshots"), 
    Resolver.typesafeRepo("releases")
)

Donovan 描述的 dependencies 命令对于检查依赖项是否可以解决非常有帮助!

The dependencies command as described by Donovan is very helpful to check whether a dependency could be resolved or not!

推荐答案

这看起来像是在激活器中重新加载项目定义失败.

This looks like a failure to reload the project definition within activator.

如果我用以下内容更新我的 build.sbt,项目仍然会正确编译,因为依赖项没有问题,但因为它不知道更改.

If I update my build.sbt with the following, the project will still compile correctly not because there are no problems with the dependency but because it doesn't know about the changes.

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs,
  "foo" % "bar" % "1.0"
)

编译消息:

[exampleApp] $ compile
[success] Total time: 0 s, completed 29-apr-2015 9:13:30

如果我现在重新加载我的项目配置,我们就会开始看到问题.

If I now reload my project configuration, we'll start to see problems.

[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: foo#bar;1.0: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[trace] Stack trace suppressed: run last *:update for the full output.
[error] (*:update) sbt.ResolveException: unresolved dependency: foo#bar;1.0: not found

这正是您添加需要特殊解析器的依赖项时所看到的,例如快照等.

This is exactly what you would see if you added a dependency that requires a special resolver, e.g. snapshots, etc.

让我们从 build.sbt 和 reload 中删除该行,以便我们可以正确编译,然后为项目中不存在的包添加导入.

Let's remove that line from build.sbt and reload so we can compile correctly, and then add an import for a package that doesn't exist within the project.

build.sbt(然后重新加载)

build.sbt (followed by a reload)

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs
)

Application.java

Application.java

import play.*;
import play.mvc.*;

import views.html.*;
import foo.bar.*;

public class Application extends Controller {

    public static Result index() {
        return ok(index.render("Your new application is ready."));
    }
}

编译这个结果

[error] D:	mpexampleAppappcontrollersApplication.java:7: error: package foo.bar does not exist
[error] import foo.bar.*;
[error] ^
[error] 1 error
[error] (compile:compile) javac returned nonzero exit code

这两个错误有非常不同的特征,结合上面提到的 dependencies 应该可以帮助你找到正确的地方.

The two errors have very distinct signatures, and this combined with dependencies as mentioned above should help guide you to the right place.

这篇关于播放框架:包 javax.inject 不存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆