播放框架:包javax.inject不存在 [英] Play framework: package javax.inject does not exist
问题描述
在我的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"
)
并执行干净
,更新
& 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?
非常感谢!
编辑:
扩展项目中的存储库列表/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描述的命令对检查是否可以解决依赖项很有帮助!
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:\tmp\exampleApp\app\controllers\Application.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
这两个错误的签名非常不同,如上所述,这与依赖关系
相结合,应该可以帮助您找到正确的位置
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屋!