【发布时间】:2019-06-26 07:14:37
【问题描述】:
我正在研究如何打包我的一些 Perl 应用程序并更好地管理它们的依赖项,以使我和我的客户更容易分发,这很可能根本不包括上传到 CPAN。相反,如果需要,我会提供自定义存储库,或者更有可能的是访问 SCM,例如 Subversion。
CPAN::Meta::Spec 似乎提供了我需要描述我的应用程序、它们的依赖关系甚至从何处获取它们的信息,但我想知道的是先决条件的详细程度。 The spec 包含以下句子:
必须将关系集指定为包名称到版本范围的映射。
对于我的需求来说,需要包似乎有点太低了,我更喜欢需要发行版。像 Maven 和 Gradle 这样的级别(根据我的理解)工具几乎可以工作,例如Apache Commons Lang 与 Apache Commons IO 等,而不是像 org.apache.commons.lang3.AnnotationUtils 或 org.apache.commons.io.ByteOrderMark 这样的单个类。 OTOH,文档中的示例包含以下几行:
requires => {
'perl' => '5.006',
'File::Spec' => '0.86',
'JSON' => '2.16',
},
包含perl 的行对我来说看起来不像一个包,我在系统上的任何地方都没有找到package perl 或perl.pm。在我看来,这与示例中的其他事情的处理方式不同。
我有一个系统范围的文件夹,其中包含例如一些实用程序包,对我来说似乎与一些抽象的perl 相当。该文件夹应该被定义为一个发行版,为该文件夹中的所有包维护一个版本号,因此应该允许其他应用程序 require 整个事情。如果我正确理解文档,我不仅需要在文件夹中创建META.yml,还需要创建一些例如sysutils.pm 包含 package sysutils; 并定义了一些版本。
有什么方法可以避免创建该文件并且真的只创建require 分发本身吗?
META.yml 已经包含了它自己的名称和版本,所以看起来像一些抽象的东西,理论上可以require。我认为不需要添加一个额外的.pm-文件来表示发行版本身,只允许require 工作。就我而言,它不包含任何业务逻辑。
谢谢!
【问题讨论】: