4

jar を含む外部 lib ディレクトリがあります。プロジェクトをコンパイルしてテストするには、これらをクラスパスに含める必要がありますが、universal:packageBin( sbt-native-packager で) (または.distplayframework

provided次のようにスコープを使用してこれを実行しようとしました。

unmanagedBase in Provided := new java.io.File("/external/lib")

しかし、これは宣伝されているようには機能しないようです.jarはCompileスコープに含まれていないようです.

私は sbt 0.13.1を使用しています。

4

2 に答える 2

3

これはうまくいきます(私の答えを改善してくれた@jacek-laskowskiに感謝します):

mappings in Universal :=  (mappings in Universal).value.filter { case(jar, _) => jar.getParentFile != unmanagedBase.value }

しかし、それはまだクラッジのように感じます。このシナリオはまさにそれが意図されているものであるため、 sbt(およびsbt-native-packager) がスコープを適切にサポートする場合は、それをはるかに好むでしょう。Provided

于 2014-04-01T00:18:54.527 に答える
1

次の解決策を提案します。

mappings in Universal := (mappings in Universal).value filter { case (jar, path) => 
  jar.getParentFile != (unmanagedBase in Compile).value
}

mappings in Universalで回避できる重複があります~=が、.valueマクロのサポートは提供されません。

unmanagedBase in Compileただし、設定の値を使用するため、ソリューションはタイプセーフであると思いますjava.io.Filejava.lang.Stringタイプミスが発生しやすいものではありません)。

于 2014-04-03T09:40:49.770 に答える