1

我正在创建一个新的 Spring Boot 应用程序。我对模式非常熟悉.gitignore,但我看到一些故意模板化的东西,上面有“意图”的味道。以下是由 Spring Initializr 在许多 IDE 中生成的。

target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
 ...
 ...
build/
!**/src/main/**/build/
!**/src/test/**/build/

我相信这与 maven 的多模块项目功能有关,但 Initializr 应用程序不是多模块的(在开始时)。除此之外,我在这里读的是什么?如果我对我认为所说的内容进行了抨击,那是我不想做的事情(作为一般做法)。

“忽略target/任何遇到的文件夹,但target顶层以下的文件夹 包括那些。some/path/src/main/deeper/still/target/

“哦,对 NetBeansbuild/目录做同样的事情!”

这完全没有意义。为什么我会提交构建生成的目标内容?因此,我试图推断 Spring 工程师的意图。

更新

事实上,这正是它所做的,在根目录更深处包含target或目录。达到什么目的?build

mkdir -p some/path/src/main/deeper/still/target/
touch !$/test.txt

这个新target目录包含在暂存和提交中。删除它,它会被忽略。

4

1 回答 1

1

基本上,这些“包含”(否定排除)确保在提交中不会遗漏下面的目录src/mainsrc/test可能被命名的目录target,例如包名。

根据 Spring Initializr gitter 的讨论,Spring 提交者 Andy Wilkinson 指出:

这是为了防止对 Maven 的构建输出目录 ( target) 的忽略导致名为的包中的代码target被忽略。

在许多情况下,在个别用例中安全删除,“除非你为 Target 工作”(Target Brands, Inc. 可能将包命名为com.target.api.*)(以安迪为例)。

我的问题应该用src/mainand来回答src/test,但我让这个词的误导,让target我感到困惑。事实上,我在我自己的例子中证明了这一点,但无法超越这个词。哦!

于 2020-10-26T14:22:31.907 回答