代码之家  ›  专栏  ›  技术社区  ›  user1506104

不公开我所依赖的jar文件

  •  1
  • user1506104  · 技术社区  · 6 年前

    我有一个AAR图书馆,它依赖于某个特定的 lib.jar

    dependencies {
        implementation files('myexternallibs/lib.jar')
        ...
    }
    

    在生成的AAR中,我仍然可以访问 库.jar . 根据这里的许多答案 implementation 应该不会发生这种事。我错过了什么?

    4 回复  |  直到 6 年前
        1
  •  1
  •   Martin    6 年前

    实现将阻止访问由实现的库 lib.jar

    例如:

    Library1
      |-> Class1
      |-> Class2
    
    Library2 (implementation 'Library1')
      |-> Class3 (this library can access Class1 and Class2)
    
    YourProject (implementation 'Library2')
      |-> Main (this library can access Class3, but not Class1 and Class2)
    
        2
  •  1
  •   Martin Zeitler    6 年前

    普通的 implementation 应与正确书写的;建造图书馆。

    只需添加 .jar

    以提供完全控制哪些方法是可访问的。

    Java Library Plugin .

        3
  •  0
  •   Deian    6 年前

    https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation

    dependencies {
        api 'commons-httpclient:commons-httpclient:3.1'
        implementation 'org.apache.commons:commons-lang3:3.5'
    }
    
        4
  •  0
  •   user1506104    6 年前

    我变了 implementation compileOnly . 成功了。

    来自的注释 documentation

    如果使用此配置,则库模块必须包含 然后优雅地改变它的行为,这样它仍然可以正常工作 未提供。

    为此,需要检查类路径,如下所示:

    try {
        Class.forName("com.company.ClassName");
    }
    catch (ClassNotFoundException ex) {
        // class is not available
    }