我正在尝试将sbt与以下插件https://github.com/siasia/xsbt-proguard-plugin一起使用。到目前为止,我没有遇到任何插件问题,除了proguard将所有非托管jar放入最终的min.jar文件(导致多个jar的问题发生冲突)。 Proguard有proguardLibraryJars标志,允许你为proguard指定jar来排除
基本上我想使用插件将TaskKey unamangedJars中的所有jar添加到proguardLibraryJars,即执行类似这样的操作
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)来编写我正在尝试做的事情
答案 0 :(得分:0)
我有一个SBT插件的公共存储库,可以将jar传递给proguard。它不使用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,它在运行时从那里加载压缩类。
答案 1 :(得分:0)
adamw/xsbt-proguard-plugin,这是siasia / xsbt-proguard-plugin的继承者,似乎有这样的选择:
默认情况下,将指示Proguard包含除Java运行时的类之外的所有内容。要将其他库视为外部库(即将它们添加到传递给Proguard的
-libraryjars
列表中),请执行以下操作。下面是一个如何选择名为&#34; httpclient&#34;来自库依赖项:proguardLibraryJars <++= (update) map (_.select(module = moduleFilter(name = "httpclient")))