1

次のプラグインで sbt を使用しようとしていますhttps://github.com/siasia/xsbt-proguard-plugin。これまでのところ、プラグインに問題はありませんでしたが、proguard がすべての管理されていない jar を最終的な min.jar ファイルに入れるという事実を除けば (競合する複数の jar で問題が発生します)。Proguard には、proguard が除外する jar を指定できる proguardLibraryJars フラグがあります。

基本的に、プラグインを使用してTaskKey unamangedJarsからproguardLibraryJarsにすべてのjarを追加したい、つまり、このようなことをしたい

lazy val proguard = proguardSettings ++ Seq(
    proguardOptions := Seq(
      keepMain("com.test.FacebookPostScheduler"),
      keepMain("org.postgresql.Driver")
    ),
    proguardLibraryJars <++= unmanagedClasspath

  )

問題は、上記が明らかにこの行でコンパイルされないことです

proguardLibraryJars <++= unmanagedClasspath

とともに

No implicit for Append.Values[Seq[java.io.File], sbt.Keys.Classpath] found

エラー。

Build.scala (build.sbt ではない) を使用して、最新の SBT (0.11.3-2) を使用して、私がやろうとしていることをどのようにコーディングしますか?

4

2 に答える 2

0

jar をプロガードに渡すことができる SBT プラグインのパブリック リポジトリがあります。proguard プラグインは使用しませんが、コードは依存関係を収集する方法を理解するのに役立つ場合があります。

https://github.com/tlazaro/xsbt-plugin-deployer/blob/master/src/main/scala/Deployer.scala

探す:

private def getDepsJars(project: ProjectRef, bs: BuildStructure) = forAllProjects(project, bs) {p =>
    artifactPath in Compile in packageBin in p get bs.data
  }

それはあなたに始める方法を与えるかもしれません。管理されていないものだけでなく、通常必要なものであるすべての必要な jar を収集します。

または、このプラグインを使用してコラボレーションすることもできます。コードは少しずさんです。まだリリースするつもりはありません。プラグインは、pack200 を使用してすべてを jar に圧縮し、実行時にそこから圧縮されたクラスをロードするカスタム ClassLoader を使用するなど、他のいくつかの優れた機能を実行します。

于 2012-08-02T17:37:04.033 に答える
0

siasia/xsbt-proguard-pluginの後継である adamw/xsbt-proguard-plugin には、非常にオプションがあるようです。

デフォルトでは、Proguard は Java ランタイムのクラスを除くすべてを含めるように指示されます。追加のライブラリを外部として扱う (つまり、それらを-libraryjarsProguard に渡されるリストに追加する) には、次のようにします。ライブラリの依存関係から「httpclient」という名前のモジュールを選択する方法の例を次に示します。

proguardLibraryJars <++= (update) map (_.select(module = moduleFilter(name = "httpclient")))
于 2013-08-31T09:03:35.137 に答える