เรากำลังพยายามสร้างไฟล์บุคคลที่สามที่แสดงรายการใบอนุญาตจากไลบรารีที่เราใช้ สำหรับสิ่งนี้ เราใช้ ปลั๊กอิน maven ใบอนุญาต และเป็น เพิ่มเป้าหมายบุคคลที่สาม
มันทำงานได้ดีสำหรับห้องสมุดส่วนใหญ่ของเรา ประเด็นก็คือ การพึ่งพาบางส่วนของเรานั้นเก่ามาก และไม่มีอยู่ใน Maven Central สำหรับคนอื่นๆ เราได้ทำการแก้ไขแล้ว ในทั้งสองกรณี เราจัดเก็บข้อมูลเหล่านั้นไว้ใน repo ของบุคคลที่สามจาก 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 ดังนั้นเราจึงอาจทำอะไรผิดพลาด
ฉันได้ดูเอกสารค่อนข้างมากรวมถึงแหล่งที่มาของปลั๊กอิน แต่ไม่พบสาเหตุที่ไม่คำนึงถึงใบอนุญาตสำหรับไลบรารีเหล่านั้น