我们正在尝试创建一个第三方文件,其中列出了我们正在使用的库中的许可证。为此,我们使用了许可 maven 插件,它添加了第三方目标。
对于我们的大多数图书馆来说,它工作正常。问题是,我们的一些依赖项非常古老,并且在 Maven Central 上不存在。对于其他一些,我们进行了修改。在这两种情况下,我们都将它们自己存储在 Nexus 的第三方存储库中。
这些库确实包含许可证信息,例如如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company.lib</groupId>
<artifactId>lib-jcuda</artifactId>
<version>0.4.2</version>
<description>POM was created by Sonatype Nexus</description>
<licenses>
<license>
<name>MIT License</name>
<url>http://www.opensource.org/licenses/mit-license.php</url>
<distribution>repo</distribution>
</license>
</licenses>
</project>
问题是,当我们运行目标时,它们无法识别,我们收到以下消息:
[WARNING] There are 16 dependencies with no license :
[WARNING] - com.spacemetric.lib--lib-jcublas--0.4.2
[WARNING] - com.spacemetric.lib--lib-jcuda--0.4.2
(Unknown license) lib-jcuda (com.spacemetric.lib:lib-jcuda:0.4.2 - no url defined)
当打开-X标志时,我们会得到一些额外的信息:
[DEBUG] Verifying availability of C:\Users\me\.m2\repository\com\company\lib\lib-jcuda\0.4.2\lib-jcuda-0.4.2.pom from [central (https://repo.maven.apache.org/maven2, default, releases)]
如果我运行一些我为测试而构建的 java 代码,我可以毫无问题地看到许可证信息:
MavenXpp3Reader mavenreader = new MavenXpp3Reader();
String pomfile = "C:\\Users\\me\\.m2\\repository\\com\\company\\lib\\lib-jcuda\\0.4.2\\lib-jcuda-0.4.2.pom";
try (FileReader reader = new FileReader(pomfile);) {
Model model = mavenreader.read(reader);
model.setPomFile(new File(pomfile));
MavenProject project = new MavenProject(model);
List<License> licenses = project.getLicenses();
for (License l : licenses) {
System.out.println(l.getUrl());
}
}
catch (IOException | XmlPullParserException e) {
e.printStackTrace();
}
在获取依赖项时,我们是否缺少任何明显的东西?这个问题似乎只出现在我们必须将自己添加到 Nexus 的库中,所以我们可能做错了什么。
我已经看了很多文档,以及插件的源代码,但找不到为什么这些库没有考虑到许可证。