2015-04-28 88 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結合。