12

当我在 Mac 上.idea/jarRepositories.xml更新 Android Studio 时,3.5.3我发现了一个不熟悉的文件。4.0.1内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RemoteRepositoriesConfiguration">
    <remote-repository>
      <option name="id" value="central" />
      <option name="name" value="Maven Central repository" />
      <option name="url" value="https://repo1.maven.org/maven2" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="jboss.community" />
      <option name="name" value="JBoss Community repository" />
      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="BintrayJCenter" />
      <option name="name" value="BintrayJCenter" />
      <option name="url" value="https://jcenter.bintray.com/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="Google" />
      <option name="name" value="Google" />
      <option name="url" value="https://dl.google.com/dl/android/maven2/" />
    </remote-repository>
  </component>
</project>

上面已经有问题了,VonC 回答说可以添加到.gitignore.

我想知道是否应该将其添加.gitignore并且不应该将其提交给 git。我如何决定将其添加到.gitignore?

JetBrains.gitignore

github的流行存储库gitignore有,但在撰写此问题时还没有。Android.gitignore.idea/jarRepositories.xml

另一方面,Global/JetBrains.gitignore有以下评论。

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn.  Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr

如您所见,它具有.idea/jarRepositories.xml并且该行已被注释掉。它还有以下注释:

具有自动导入功能的 Gradle 和 Maven

当使用带有自动导入功能的 Gradle 或 Maven 时,您应该排除模块文件,因为它们将被重新创建,并且可能会导致流失。如果使用自动导入,请取消注释。

在 Android Studio4.0.x中,是否可以在不自动导入的情况下使用 Gradle?

远程 Jar 存储库

在上面,davidkron 的pull request已经添加了Global/JetBrains.gitignore该行,他评论如下:# .idea/jarRepositories.xml

从 IntelliJ 2019.3 开始,该文件自动出现在我们的 git 更改中。这些似乎只是有关在 Maven/Gradle 中定义的远程存储库的缓存信息。

进行此更改的原因:

在 Maven/Gradle 构建中,不应提交自动生成的文件。

支持这些规则更改的文档链接:

我还没有找到有关此文件的文档或文章,但我的假设基于以下步骤:

  • 在 IntelliJ 中,可以在“设置”菜单中管理“远程 Jar 存储库”
  • 我删除了列表中的每个条目-> 文件消失了
  • 我再次重新导入了 Maven/Gradle 项目
  • 该文件再次出现,并显示与以前相同的条目

正如他的评论,Android Studio4.0.1具有Remote Jar Repositories设置,如您在以下屏幕截图中所见。

在此处输入图像描述

我查看了 Android Studio 的发行说明4.0.0,发现有一段如下:

IntelliJ IDEA 2019.3.3

核心 Android Studio IDE 已通过 IntelliJ IDEA 到 2019.3.3 版本的改进进行了更新。

要了解更多关于版本 2019.3.3 中累积包含的其他 IntelliJ 版本的改进,请参阅以下页面:

  • IntelliJ IDEA 2019.3
  • IntelliJ IDEA 2019.3.3

我不确定,但想知道我是否应该添加.idea/jarRepositories.xml并且.gitignore不应该将其提交给 git。我如何决定是否添加它?如果有人能澄清标准,我真的很感激。

更新:

在 Android Studio 的源代码中4.0.0,我找到了定义文件名的源文件jarRepositories.xml

JpsRemoteRepositoriesConfigurationSerializer.java

public JpsRemoteRepositoriesConfigurationSerializer() {
  super("jarRepositories.xml", "RemoteRepositoriesConfiguration");
}

RemoteRepositoriesConfiguration.java

@State(name = "RemoteRepositoriesConfiguration", storages = @Storage("jarRepositories.xml"))
public class RemoteRepositoriesConfiguration implements PersistentStateComponent<RemoteRepositoriesConfiguration.State> {
  // ...
}

我还在 JetBrain 的 IntelliJ IDEA 社区版的存储库中找到了它们的起源。

Jps根据一份文件,代表JetBrains Project System

External Build 过程中的项目模型由 JPS(JetBrains Project System)提供。

JPS 以前的存储库将自己描述为:

基于 Gant 的构建框架 + dsl,具有声明性项目结构定义和自动 IntelliJ IDEA 项目构建

4

2 回答 2

12

该文件.idea/jarRepositories.xml应添加到.gitignore. 它是自动生成的,只有关于远程 jar 存储库的冗余信息。

我们的 Android 项目在项目级别定义了这些存储库,build.gradle例如:

allprojects {
    repositories {
        google()
        jcenter()
    }
}

第二个参考在其网页顶部写了以下介绍:

添加构建依赖项

Android Studio 中的 Gradle 构建系统可以轻松地将外部二进制文件或其他库模块作为依赖项包含到您的构建中。...本页描述了如何在您的 Android 项目中使用依赖项,...但请记住,您的 Android 项目只能使用本页定义的依赖项配置。[重点补充]

此外,Android Studio中的Add Library Dependencies4.0.1对话框有如下指令:

第1步。

使用下面的表格查找要添加的库。此表单使用项目构建文件中指定的存储库(Google、JCenter、Android 存储库、Google 存储库)

您可以通过以下步骤找到它:

  1. 在 Android Studio 的菜单中选择File > Project Structure...。
  2. 在Project Structure对话框的左侧菜单中选择Dependencies 。
  3. 模块列中选择应用程序。
  4. 声明的依赖列中选择+ 。
  5. 在弹出菜单中选择1 Library Dependency 。
于 2020-08-23T06:27:57.617 回答
6

我如何决定是否添加它?

决定是否应忽略文件的明确通用标准是:

你可以克隆没有该文件的存储库并且仍然有一个有效的项目(一个你可以编译和执行的项目)

例如,如果该文件是自动重新生成的,或者是使用自定义本地路径重新创建的(这对于不同 PC 上的不同开发人员来说没有意义),那么可以忽略该文件。

所以尝试一下,特别是考虑到您可以“为 IntelliJ IDEA 项目禁用或启用 Gradle / Maven 自动导入”。

于 2020-08-10T22:27:32.987 回答