简体   繁体   English

替换 jar 中的类,jar 位于 Axis2 aar 文件中

[英]Replacing classes inside a jar, which is inside an Axis2 aar file

I have an Axis2 aar file, buried within that aar file I have a jar file containing my compiled classes, one of which I'd like to replace.我有一个 Axis2 aar 文件,埋在该 aar 文件中我有一个 jar 文件,其中包含我编译的类,我想替换其中的一个。

This is a simplified version of what I have这是我所拥有的简化版本

MyService.aar contains : MyService.aar 包含:

lib\\JarJarBinks.jar

JarJarBinks.jar contains : JarJarBinks.jar 包含:

com\\example\\skywalker\\TheForce.class

I want to replace TheForce.class , the only mechanism that springs to mind, without rebuilding everything is :我想替换TheForce.class ,唯一能想到的机制是:

  1. List item项目清单
  2. Unjar the aar file解压 aar 文件
  3. Pull out JarJarBinks.jar拉出JarJarBinks.jar
  4. Unjar JarJarBinks.jar解压JarJarBinks.jar
  5. Replace TheForce.class with my updated copy用我更新的副本替换TheForce.class
  6. Jar up JarJarBinks , and place it back in the extracted aar layout Jar up JarJarBinks ,并将其放回提取的 aar 布局中
  7. Jar up the aar file压缩 aar 文件

I could create a bash script to automate this, but I'm wondering if there is a more cleaner / quicker way.我可以创建一个 bash 脚本来自动执行此操作,但我想知道是否有更清洁/更快的方法。

I've found the update option of jar u but I don't believe it works for nested artefacts.我找到了jar u的更新选项,但我认为它不适用于嵌套的人工制品。

Thanks谢谢

For your Axis2 to work, you don't need an aar file.要使 Axis2 正常工作,您不需要aar文件。

services.xml file can be either of the below locations for the Axis2 to work. services.xml 文件可以是 Axis2 工作的以下任一位置。

  1. repository/services/SimpleService/meta-inf/services.xml存储库/服务/SimpleService/meta-inf/services.xml
  2. WEB-INF/services/SimpleService/meta-inf/services.xml WEB-INF/services/SimpleService/meta-inf/services.xml

This will help us have an extra step of generating the aar file.这将帮助我们有一个额外的步骤来生成 aar 文件。

ServiceDeployer.java服务部署者.java

 * <p>
 * Standard Axis2 service Deployer which use services.xml file to build
 * services. ServiceDeployer can be used with Axis2 archive (.aar) or exploded
 * directory structure. Some of the example formats given below.
 * </p>
 * <p>Examples : <p>
 *        <ul>
 *          <li>repository/services/SimpleService.aar/meta-inf/services.xml</li>
 *          <li>repository/services/SimpleService/meta-inf/services.xml</li>
 *          <li>WEB-INF/services/SimpleService.aar/meta-inf/services.xml</li>
 *          <li>WEB-INF/services/SimpleService/meta-inf/services.xml</li>
 *       </ul>
 
     InputStream servicexmlStream = serviceClassLoader
            .getResourceAsStream("META-INF/services.xml");
    if (servicexmlStream == null) {
        servicexmlStream = serviceClassLoader.getResourceAsStream("meta-inf/services.xml");
    } else {
        metainf = "META-INF";
    }

https://axis.apache.org/axis2/java/core/apidocs/org/apache/axis2/deployment/ServiceDeployer.html https://axis.apache.org/axis2/java/core/apidocs/org/apache/axis2/deployment/ServiceDeployer.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM