2011-10-20 27 views
7

私はjarプロジェクトに依存する旧来のwarプロジェクトを持っていますが、jarプロジェクトではコンパイルのためにクラスパスに管理されていないjarファイルを追加する必要があります。しかし、これらの瓶は戦争に梱包されるべきではありません。だから私の質問は、フルClasspathからこれらのエントリを削除する方法です。以下は動作しません:コンパイル後にクラスパスからエントリを削除する

私は確かにこれを行う簡単な方法が必要ですが、それまではそれは私を逃しています。

編集:あなたはmanagedClasspathにローカルのjarファイルを追加するにはどうすればよい:私はとの質問に言い換えることができます代わりに、管理対象外の管理クラスパスを使用するには、パブロの暗示に基づいています。私の瓶は、(非常に)非標準のレイアウトとローカルフォルダに配置されています

lib/testng.jar 
lib/gwt/2.3/gwt-user.jar 
lib/jetty/servlet.jar 

をだから、基本的に私のようなものを探しています:私は私自身のローカルlibフォルダから瓶をつかむできるように

libraryDependencies += "testng" % "provided->test" 
libraryDependencies += "gwt" % "2.3" % "gwt-user" % "provided->compile" 
libraryDependencies += "jetty" % "servlet" % "provided->default" 

答えて

15

一部の情報がClasspathsページで提供されていますが、それはあまり明確ではない。この情報は、コマンド(Inspecting Settingsページを参照)を使用しても入手できます。

基本的には、短い手の表記で設定X、のために:

// complete, exported classpath, such as used by 
// 'run', 'test', 'console', and the war task 
fullClasspath in X = 
    dependencyClasspath in X ++ exportedProducts in X 

// classpath only containing dependencies, 
// used by 'compile' or 'console-quick', for example 
dependencyClasspath in X = 
    externalDependencyClasspath in X ++ internalDependencyClasspath in X 

// classpath containing only dependencies external to the build 
// (as opposed to the inter-project dependencies in internalDependencyClasspath) 
externalDependencyClasspath in X = 
    unmanagedClasspath in X ++ managedClasspath in X 

// the manually provided classpath 
unmanagedClasspath in X = 
    unmanagedJars for X and all configurations X extends, transitively 

だから、通常、あなたが管理されていないライブラリを追加したい場合、あなたはunmanagedJarsに追加します。たとえば、ライブラリをunmanagedJars in Compileに追加すると、sbtは、unmanagedClasspathのライブラリをCompile,Runtime、およびTestに正しく含めることになります。

ただし、ここで明示的に制御する必要があります。 jarファイルを追加するunmanagedClasspathにライブラリを追加します。これはunmanagedClasspath in Compileです。たとえば、SBT 0.11.0+に:

unmanagedClasspath in Compile <++= baseDirectory map { base => 
    val lib = base/"lib" 
    Seq(
    lib/"testng.jar", 
    lib/"gwt/2.3/gwt-user.jar", 
    lib/"jetty/servlet.jar" 
) 
} 

戦争プラグインはランタイムクラスパスを使用して、これらのjarファイルのみが戦争でコンパイルクラスパスではなく上に表示されますと仮定。

3

sbtはivy-like configurationsをサポートし、基本的なスコープを実装します。

あなたはコンパイル時クラスパスにいくつかのjarファイルを使用したいが、それらを出荷したくない場合は、私はprovidedスコープがあなたのためだと思います:

libraryDependencies += "org.example" % "example" % "1.0" % "provided->compile" 
+0

私はこれについて考えていましたが、問題は、自動的にダウンロードされるlibs(推移的な依存関係を含む)を使用できないということです。したがって、各eclipseプロジェクトにはjarファイルが置かれたlibフォルダがあり、ライブラリ内のjarファイルをlibrary.dependenciesを使って見つけることができませんでした(プロジェクト内では、ivy/maven以外のレイアウト(fx /lib/gwt/2.3/) gwt-user.jar /lib/gwt/2.3/gwt-dev.jar ...)。 –

関連する問題