我正在研究如何打包我的一些 Perl 应用程序并更好地管理它们的依赖项,以使我和我的客户更容易分发,这很可能根本不包括上传到 CPAN。相反,如果有必要,我会提供自定义 repos,或者更有可能的是访问像 Subversion 这样的 SCM。
CPAN::Meta::Spec似乎提供了我需要描述我的应用程序、它们的依赖关系甚至从何处获取它们的内容,但我想知道的是先决条件的详细程度。该规范包含以下句子:
必须将关系集指定为包名称到版本范围的映射。
对我的需求来说,要求包似乎有点太低了,我宁愿要求发行版。像 Maven 和 Gradle 这样的级别(根据我的理解)工具几乎可以工作,例如 Apache Commons Lang 与 Apache Commons IO 等,而不是像org.apache.commons.lang3.AnnotationUtils
or之类的单个类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
-file 代表分发本身只是为了允许require
工作。在我的情况下,它不包含任何业务逻辑。
谢谢!