播放框架:包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"
)
并执行干净
,更新
& 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.