Tôi đang tạo một plugin Maven với một yêu cầu khá độc đáo cho hoạt động thích hợp: nó cần tạo ra các quy trình mới của chính nó và sau đó chờ các quy trình đó hoàn thành một nhiệm vụ.Trình cắm thêm Maven Plugin với Classpath thích hợp
Trong khi điều này là tương đối nhỏ để thực hiện trên dòng lệnh, các trình cắm Maven không được gọi theo cách tương tự như mã Java truyền thống và do đó không có đường dẫn lớp. Tôi không thể tìm ra cách để giải quyết classpath chính xác bên trong các plugin như vậy mà tôi có thể sinh ra một JVM mới (gọi phương thức Main của một lớp khác bên trong plugin).
Sử dụng vật hiện tại của MavenProject
tôi có thể nhận được một tài liệu tham khảo Artifact
để bản thân mình (plugin) và làm cho nó là thư mục tương đối bên trong kho Maven địa phương:
Artifact self = null;
for (Artifact artifact : project.getPluginArtifacts()) {
if ("my-group-id".equals(artifact.getGroupId()) && "my-artifact-id".equals(artifact.getArtifactId())) {
self = artifact;
break;
}
}
if (self == null) {
throw new MojoExecutionException("Could not find representation of this plugin in project.");
}
for (ArtifactRepository artifactRepository : project.getPluginArtifactRepositories()) {
String path = artifactRepository.pathOf(self);
if (path != null) {
getLog().info("relative path to self: " + path);
break;
}
}
Làm thế nào để có được một tài liệu tham khảo cho tất cả các phụ thuộc của nó (và phụ thuộc transitive) như vậy mà tôi có thể xây dựng một classpath đầy đủ cho một lời gọi mới? Tôi thấy rằng self
có bộ lọc phụ thuộc nhưng tôi không biết áp dụng nó ở đâu.
Đây có phải là cách thích hợp để tạo quy trình mới "bản thân" bên trong plugin không? Có cách nào tốt hơn?
Dịch vụ của bên thứ ba mà tôi đang tương tác chỉ cho phép một kết nối cho mỗi quá trình và thực thi chúng một cách liên tục không phải là một tùy chọn. Tôi cần phải có từ 5 đến 20 tương tác trong một lần chạy plugin này. Tôi sẽ điều tra các đề xuất của bạn sau, cảm ơn. –