播放框架:包 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"
)
并执行clean
、update
&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.
相关文章