Scala 向SBT中的ProGuardLibraryJAR添加非托管JAR
我正在尝试将sbt与以下插件一起使用。到目前为止,除了proguard将所有非托管jar放入最终的min.jar文件(导致多个jar发生冲突)之外,我对插件没有任何问题。Proguard具有proguardLibraryJars标志,允许您为Proguard指定要排除的JAR 本质上,我想使用插件将TaskKey unamangedJars中的所有JAR添加到ProGuardLibraryJAR中,即执行类似的操作Scala 向SBT中的ProGuardLibraryJAR添加非托管JAR,scala,classpath,sbt,proguard,xsbt-proguard-plugin,Scala,Classpath,Sbt,Proguard,Xsbt Proguard Plugin,我正在尝试将sbt与以下插件一起使用。到目前为止,除了proguard将所有非托管jar放入最终的min.jar文件(导致多个jar发生冲突)之外,我对插件没有任何问题。Proguard具有proguardLibraryJars标志,允许您为Proguard指定要排除的JAR 本质上,我想使用插件将TaskKey unamangedJars中的所有JAR添加到ProGuardLibraryJAR中,即执行类似的操作 lazy val proguard = proguardSettings ++
lazy val proguard = proguardSettings ++ Seq(
proguardOptions := Seq(
keepMain("com.test.FacebookPostScheduler"),
keepMain("org.postgresql.Driver")
),
proguardLibraryJars <++= unmanagedClasspath
)
错误
您将如何使用Build.scala(而不是Build.SBT)编写我使用最新SBT(0.11.3-2)尝试执行的操作?我有一个SBT插件的公共存储库,可以将JAR传递给proguard。它不使用proguard插件,但代码可能会帮助您了解如何收集依赖项 寻找:
private def getDepsJars(project: ProjectRef, bs: BuildStructure) = forAllProjects(project, bs) {p =>
artifactPath in Compile in packageBin in p get bs.data
}
这可能会给你一个开始的方法。它收集每个需要的罐子,这是你通常想要的,而不仅仅是非托管的
或者,你可以使用这个插件,或许可以进行协作。代码有点草率,还不打算发布。该插件还做了其他一些简单的事情,比如用pack200将所有内容压缩到一个jar中,并有一个自定义的类加载器在运行时从那里加载压缩的类。,它是siasia/xsbt-proguard插件的继承者,似乎有一个非常好的选择:
默认情况下,Proguard将被指示包括Java运行时中除类以外的所有内容。要将其他库视为外部库(即将它们添加到传递给Proguard的-LibraryJAR
列表中),请执行以下操作。下面是如何从库依赖项中选择名为“httpclient”的模块的示例:
proguardLibraryJars <++= (update) map (_.select(module = moduleFilter(name = "httpclient")))
proguardLibraryJars
private def getDepsJars(project: ProjectRef, bs: BuildStructure) = forAllProjects(project, bs) {p =>
artifactPath in Compile in packageBin in p get bs.data
}
proguardLibraryJars <++= (update) map (_.select(module = moduleFilter(name = "httpclient")))