通过


Java 依赖项验证

注意

此功能仅在 .NET 9+ 中可用。

为适用于 Android 的 .NET 创建 Java 绑定库时,一个常见问题不是提供所需的 Java 依赖项。 绑定进程忽略需要缺少依赖项的 API,因此这可能会导致大部分所需的 API 未绑定。

与 .NET 程序集不同,Java 库不会在包中指定其依赖项。 依赖项信息存储在名为 POM 文件的外部文件中。 若要使用此信息来确保正确的依赖项,必须将附加的文件层添加到绑定项目中。

提示

与此系统交互的首选方法是使用 <AndroidMavenLibrary> 该系统,这将自动下载任何所需的 POM 文件。

例如:

<AndroidMavenLibrary Include="com.squareup.okio:okio" Version="1.17.4" />

自动扩展到:

<AndroidLibrary 
  Include="<MavenCacheDir>/Central/com.squareup.okio/okio/1.17.4/com.squareup.okio_okio.jar" 
  Manifest="<MavenCacheDir>/Central/com.squareup.okio/okio/1.17.4/com.squareup.okio_okio.pom"
  JavaArtifact="com.squareup.okio:okio:1.17.4" />
  
<AndroidAdditionalJavaManifest
  Include="<MavenCacheDir>/Central/com.squareup.okio/okio-parent/1.17.4/okio-parent-1.17.4.pom"
  JavaArtifact="com.squareup.okio:okio-parent:1.17.4" />
  
etc.

但是,也可以通过使用此处记录的构建项目手动选择加入 Java 依赖关系验证。

规范

若要手动选择进行 Java 依赖项验证,请将ManifestJavaArtifact属性添加到<AndroidLibrary>项中:

<!-- JavaArtifact format is {GroupId}:{ArtifactId}:{Version} -->
<ItemGroup>
  <AndroidLibrary
    Include="my_binding_library.jar"
    Manifest="my_binding_library.pom"
    JavaArtifact="com.example:mybinding:1.0.0" />
</ItemGroup>

如果 my_binding_library.pom 指定了不满足的依赖项,那么现在生成绑定项目应会导致验证错误。

例如:

error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied.

看到这些错误或没有错误应指示 Java 依赖项验证正常工作。 按照“解决 Java 依赖项”指南修复任何缺少的依赖项错误。

其他 POM 文件

POM 文件有时可以使用一些可选功能,使其比上述示例更为复杂。

也就是说,POM 文件可以依赖于“父”POM 文件:

<parent>
  <groupId>com.squareup.okio</groupId>
  <artifactId>okio-parent</artifactId>
  <version>1.17.4</version>
</parent>

此外,POM 文件还可以从另一个 POM 文件“导入”依赖项信息:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.squareup.okio</groupId>
      <artifactId>okio-bom</artifactId>
      <version>3.0.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

在无法访问这些附加 POM 文件的情况下,无法准确确定依赖项信息,并会导致如下错误:

error : Unable to resolve POM for artifact 'com.squareup.okio:okio-parent:1.17.4'.

在这种情况下,我们需要为 com.squareup.okio:okio-parent:1.17.4 提供 POM 文件。

<!-- JavaArtifact format is {GroupId}:{ArtifactId}:{Version} -->
<ItemGroup>
  <AndroidAdditionalJavaManifest
    Include="com.square.okio.okio-parent.1.17.4.pom"
    JavaArtifact="com.squareup.okio:okio-parent:1.17.4" />
</ItemGroup>

请注意,由于“父”POM和“导入”POM本身也可能具有自己的父级或导入的POM文件,我们可能需要重复此步骤,直到能够解析所有的POM文件为止。

另请注意,使用 <AndroidMavenLibrary> 时一切应自动处理。

此时,如果存在依赖项错误,请按照 “解决 Java 依赖项 ”指南修复任何缺少的依赖项错误。