2015-04-28 87 views
2

在我玩2.0框架的Java项目,下面的行产生无论是在Eclipse和在SBT编译步骤错误:游戏框架:包javax.inject不存在

import javax.inject.*; 

我已经添加了javax.inject依赖关系我build.sbt文件:

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疯狂:

[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)。这怎么激活?

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

非常感谢!

编辑:

扩展项目库列表/ plugins.sbt通过以下方式奏效了:

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

由多诺万描述的dependencies命令非常有用,检查是否依赖关系可以解决或不!

+0

尝试删除常春藤本地缓存。 –

+0

因此,我删除了我的主目录中的完整.ivy2目录,'clean','update'和'eclipse with-source = true',它抛出了与发布时相同的错误:/ –

+2

也许您需要添加一些解析器。 类似于:'解析器+ = “Sonatype OSS快照”位于“https://oss.sonatype.org/content/repositories/snapshots”' –

回答

5

这看起来像是未能在激活器中重新加载项目定义。

如果我更新我的build.sbt以下,该项目仍然会正确编译而不是,因为依赖没有问题,但因为它不知道有关的变化。

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

编译消息:

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

如果我现在reload我的项目配置,我们就可以看到问题。

[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 

这正是你会看到,如果你添加一个依赖项,需要一个特殊的解析器,例如,快照等。

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

build.sbt(后面跟一个重装)

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

应用。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 

两个错误编译这个结果有非常明显的特征,这与上面提到的应该帮助指导你正确的地方dependencies结合。