问题标签 [jarjar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 重新打包 .jar 文件
我需要将一些 JRE7 库中的 jar 添加到我的 Android 项目中。但例如rt.jar
与android.jar
来自 Adroid 2.2 SDK 的冲突,所以我得到这个错误:
不构建核心库时对核心类(java.* 或 javax.*)的不明智或错误使用。
这通常是由于在使用 IDE(例如 Eclipse)时无意中在应用程序的项目中包含了核心库文件。如果您确定您不是故意定义核心类,那么这是对正在发生的事情的最可能的解释。
但是,您实际上可能正在尝试在核心命名空间中定义一个类,例如,您可能从非 Android 虚拟机项目中获取了该类的源代码。这肯定是行不通的。至少,它会危及您的应用程序与平台未来版本的兼容性。它的合法性也经常受到质疑。
如果你真的打算构建一个核心库——它只适合作为创建完整虚拟机发行版的一部分,而不是编译应用程序——然后使用“--core-library”选项来抑制这个错误消息。
如果您继续使用“--core-library”,但实际上正在构建应用程序,那么请预先警告您的应用程序在某些时候仍将无法构建或运行。请为愤怒的客户做好准备,他们会发现,例如,一旦他们升级操作系统,您的应用程序就会停止运行。你会为这个问题负责。
如果您合法地使用了一些恰好位于核心包中的代码,那么您拥有的最简单安全的替代方法是重新打包该代码。也就是说,将有问题的类移动到您自己的包命名空间中。这意味着它们永远不会与核心系统类发生冲突。JarJar 是一个可以帮助您完成这项工作的工具。如果你发现你做不到这一点,那么这表明你所走的道路最终会导致痛苦、痛苦、悲伤和悲叹。
我知道有几个关于它的话题,像JarJar、OneJar或FatJar这样的东西可能对我有好处。但是我不知道如何使它们中的任何一个起作用,并且文档并没有真正说明(对我而言)。我猜他们使用 Ant 命令,但我一直使用 Eclipse 内置构建器,现在我不知道如何使用 Ant 和上面提到的任何命令。
所以我的问题是:如何重新打包这个 rt.jar 以便在我的 Android 项目中编译它?
谢谢!
编辑:
好的,所以我想要实现的是创建一个.jar,可以在开发Android应用程序时使用(简化一些功能,没关系)。但我也希望能够将相同的 .jar 添加到标准 Java 项目中,以便在那里使用一些功能。它看起来像这样:编写应用程序的人将此 .jar 添加到他的 Java 项目中 -> 它使他能够生成某些文件(需要 Internet 来完成)-> 然后将这些生成的文件添加到 Android 项目中 -> 稍后,当有人使用这个 Android 应用程序时,这些文件在不使用互联网(离线)的情况下提供某些功能。
ant - 带有 Ant 的 JarJar - 如何使用规则文件
我想知道如何用 Ant 运行JarJar,通过外部规则文件传递规则。
1)我知道我可以一一通过规则如下:
2)我知道如果我从命令行运行它,我可以在文件中传递规则:
<exec>
3) 我可以在 Ant任务中使用上述命令行。(最佳解决方法)
4) 我找到了一些关于在 Maven 中使用<rulesFile>
标签的参考。
上述选项对于我想做的事情并不理想。
我想从 Ant 任务中运行 JarJar,并传入一个规则文件。
java - 如何在 Android 中使用 JarJar 来更改外部 jar 的包名?
我似乎找不到任何关于如何在Android 项目中使用JarJar的明确说明。
我有一个场景,我的应用程序项目依赖于两个独立的库,它们都碰巧使用相同的外部 .jar 文件。如果我尝试编译应用程序,我会得到“转换为 Dalvik 格式失败,错误 1”。
有人可以告诉我如何在 Android 上使用 JarJar,使用 build.xml 文件来更改第三方 .jar 文件夹的包名吗?
android - 适用于 Android 的 JAIN-SIP 1.2:缺少 javax.sip.STACK_NAME 属性
我正在尝试在 Android 设备(4.0.2)上运行 JAIN-SIP 堆栈。我能够重新打包所需的 jar 文件(jain-sip-api-1.2-src.jar、jain-sip-src-1.2.1111.jar、concurrent.jar、log4j-1.2.8.jar)。
这是我使用的 build.xml 文件:
这是一个代码示例,我尝试在非 Android 环境中测试重新打包的文件:
当我尝试运行此代码时,出现以下错误:
据我了解,我刚刚更改了包的名称,但它似乎不适用于某些包的“内部”。这就是为什么我查看源代码并看到一些硬编码字符串,例如:
现在我的问题是有什么合适的方法/解决方案可以使 Android 下的 JAIN-SIP 工作吗?
提前感谢您的帮助:-)
丹尼尔
java - 如何使用 jarjar 格式组装 maven 项目?
我尝试了一些汇编插件,例如maven-assembly-plugin
,maven-shading-plugin
但它们都不支持jarjar
文件格式。
那么是否有一个 maven 插件可以按jarjar
文件格式组装 Uber-Jar?
避免像 [ spring.handlers
, spring.schemas
]这样的资源冲突很有帮助
android - 如何重新打包 HttpClient 4.3.1 并删除对 commons-logging 的依赖?
我想重新打包 apache 的 httpclient lib 以将其与 android 应用程序一起提供(如https://code.google.com/p/httpclientandroidlib/但使用 HttpClient 4.3.1)
因此,我手动下载了httpclient 4.3.1 jar(包括其所有依赖项)并使用jarjar重新打包:
与rules.txt:
然后我用ant把输出放在一起:
我可以使用该文件来开发和测试我的应用程序,但如果我将它部署在 android 上,它会抛出一个异常,就像它无法找到my.repackaged.org.apache.logging.log4j.something
.my.package.org.apache.logging.whatEver
所以,现在我想通过使用字节码操作来消除对公共日志记录的任何依赖。之前已经这样做了:http ://sixlegs.com/blog/java/dependency-killer.html
但我想知道我实际上是如何做到的?只有 org.apache.commons.logging.Log 有依赖关系:
我认为要走的路是,删除这些依赖项并用自己的实现替换它,就像他在这里https://code.google.com/p/httpclientandroidlib/所做的那样。因此,我创建了一个新的 maven 项目,其中只有一个类具有provided
实现 org.apache.commons.logging.Log 接口的 commons-logging 范围,并且只是 delfates 到android.utils.Log
:
MyLog implements org.apache.commons.logging.Log {}
在包中my.log
,我将其打包在 my-log-1.0.0.jar 中。我将该 jar 放入与重新打包的 httpclient-jar 相同的文件夹中,并如上所述使用 ant 将所有内容打包到 my-org-apache-httpclient-4.3.1.jar 中。
方法一
我再次尝试使用 jarjar:
使用rules2.txt:
但这不起作用。仍然会抛出它找不到my.repackaged.org.apache.logging.log4j.something
引用的异常。my.package.org.apache.logging.whatEver
方法二
我还尝试从最终的 jar 中删除日志记录内容和/或重新打包 my.repackaged.org.apache.log4j 并记录到其原始包:
规则2.txt v2:
但这仍然在抛出异常:my.repackaged.org.apache.logging.log4j.something
由my.package.org.apache.logging.whatEver
问题
如何杀死/替换公共日志记录依赖项并摆脱异常?
maven - 在 Maven 中使用 jarjajr 时的空指针
通过 Maven 构建时,我得到:
Failed to execute goal org.sonatype.plugins:jarjar-maven-plugin:1.9:jarjar (default) on project myproject: Unable to JarJar: null cause: null: NullPointerException
我的 pom.xml 文件的片段:
使用 -e -X 选项编辑日志:
android - 错误的jarjar maven插件配置
这是jarjar插件配置。我需要添加这个插件来用Harmony.beans替换java.beans ,因为在android中我们不能使用java.Beans。
我认为我的结果标签有错误,请问我该如何解决?
jar - 如何在一个项目中合并两个同名但版本不同的jar文件?
我正在使用两个 jar 文件,例如httpclient-4.2.3.jar
andhttpcore-4.2.jar
但现在我想使用另外两个同名但版本不同的文件httpclient-4.3.4.jar
和httpcore-4.3.jar
. 如何在同一个项目中使用所有四个文件?
请帮我。
gradle - 如何在 gradle 中仅使用基于文件的依赖项而不是指定 groupId:artifactId:versionId
我的 gradle 文件中有以下条目
下载 'org.B:B:1.0'因为那是它的依赖项。(在 gradle 中没有明确提到)
我想在我的项目中使用的是 A* 和 B* ,它们分别是 A 和 B 的阴影(更改的命名空间)。
现在,我已将 A* 的依赖项指定为
但是,这个仍然下载'org.B:B:1.0'
如何连接 gradle 以使用file('libs/B*.jar')?