2016-12-12 102 views
1

我继承了一个Delphi项目,其中大部分事情都是在单独的Git存储库(git子模块)中存在的软件包中完成的。如果没有子包(git sub-submodules),它不会那么糟糕。Delphi软件包与子软件包本身冲突

而最糟糕的是,一个git的子模块的主营项目,并作为一个子模块的子模块用于:

MainProject -> Submodule1 
MainProject -> Submodule2 -> Submodule1 
MainProject -> Submodule3 -> Submodule1 

现在我有三个单位Submodule1之间的名称冲突。

我该怎么办?我怎么能让德尔福忽略子包中存在的单位,并使它只使用第一个嵌套级别的单位?

+1

你不能。只要确保没有命名冲突,要么确保每个单元仅存在于一个包中,要么通过重命名单元直到解决命名冲突。 –

+1

没有这样的东西作为一个子包。你需要阅读并更好地理解这个领域。 –

+1

注意[this warning](http://docwiki.embarcadero.com/RADStudio/Berlin/en/X1033_Unit_'%25s'_implicitly_imported_into_package_'%25s'_(Delphi)) –

回答

2

没有“子包”。每个软件包都是独立的软件包。但是让我们假设你有以下设置:

  • 包1
    • unit1A
    • unit1B
    • unit1C
  • 包2
    • unit2A使用unit1A
    • unit2B使用unitX
  • 包装3
    • unit3A使用unit1B
    • unit3B使用unitX

如果任何unit2Aunit2Bunit3A,或unit3B需要使用一个单元来自package1,那么应在package2package3requires部分,但单位unit1Aunit1Bunit1C应该在这些包的contains节,也不应被悄悄列入—你会得到一个消息,如果出现这种情况。

在上面的设置中,如果unitX不处于的package1package2所述requires部的封装,它就会被默默地包括在内。如果这发生在多个包中,则会产生命名冲突。所以你要么将它包含在package2之内,并且要求package2也要从package3开始,要么你把它放到它自己的包中。

所以无论你做什么:

  • 每个单位(姑且称之为A)只能在一个单一封装一次
  • 如果另一单元(比如,Z)需要使用它的(A),所述包装为包含单元A. 单元应在该单元(Z)必须参考(在requires部分)的不直接包含在内

如果仍然存在命名冲突,请重命名单位,直到每个名称都是唯一的。