在Maven插件之外,您可以使用Aether以编程方式执行此 *** 作。有一种方法
readArtifactDescriptor可以做到这一点:
获取有关工件的信息,例如其直接依赖关系和潜在的重定位。
首先,将以太依赖项添加到您的POM中:
<dependencies> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-impl</artifactId> <version>${aetherVersion}</version> </dependency> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-connector-basic</artifactId> <version>${aetherVersion}</version> </dependency> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-transport-file</artifactId> <version>${aetherVersion}</version> </dependency> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-transport-http</artifactId> <version>${aetherVersion}</version> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-aether-provider</artifactId> <version>${mavenVersion}</version> </dependency></dependencies><properties> <aetherVersion>1.1.0</aetherVersion> <mavenVersion>3.3.9</mavenVersion></properties>
然后您可以拥有:
public static void main(final String[] args) throws Exception { DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator(); RepositorySystem system = newRepositorySystem(locator); RepositorySystemSession session = newSession(system); RemoteRepository central = new RemoteRepository.Builder("central", "default", "http://repo1.maven.org/maven2/").build(); Artifact artifact = new DefaultArtifact("groupId:artifactId:version"); ArtifactDescriptorRequest request = new ArtifactDescriptorRequest(artifact, Arrays.asList(central), null); ArtifactDescriptorResult result = system.readArtifactDescriptor(session, request); for (Dependency dependency : result.getDependencies()) { System.out.println(dependency); }}private static RepositorySystem newRepositorySystem(DefaultServiceLocator locator) { locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class); locator.addService(TransporterFactory.class, FileTransporterFactory.class); locator.addService(TransporterFactory.class, HttpTransporterFactory.class); return locator.getService(RepositorySystem.class);}private static RepositorySystemSession newSession(RepositorySystem system) { DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); LocalRepository localRepo = new LocalRepository("target/local-repo"); session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo)); // set possible proxies and mirrors session.setProxySelector(new DefaultProxySelector().add(new Proxy(Proxy.TYPE_HTTP, "host", 3625), Arrays.asList("localhost", "127.0.0.1"))); session.setMirrorSelector(new DefaultMirrorSelector().add("my-mirror", "http://mirror", "default", false, "external:*", null)); return session;}
这是创建一个以太存储库系统,并告诉它读取给定工件的工件描述符。工件由构造函数构造,
newDefaultArtifact("...")并为其提供所需的坐标。
使用该工件和要从中获取请求的存储库列表创建一个请求对象。在上面的示例中,仅添加了Maven
Central,但是您可以
RemoteRepository通过使用
RemoteRepository.Builder类创建它们来添加更多内容。调用后
readArtifactDescriptor,结果包含直接依赖项列表,可以使用检索
getDependencies()。
代理和镜像可以分别在
DefaultProxySelector和的帮助下进行配置
DefaultMirrorSelector。
DefaultProxySelector.add接受一个
Proxyas参数,可以使用其构造函数通过将其类型(例如
"http"),主机,端口和可选的
Authentication(通过查看
AuthenticationBuilder类以创建身份验证对象)和非代理主机的列表传递给它。以相同的方式,
DefaultMirrorSelector.add获取其ID,URL,类型(
"default"适用于Maven,但您可以使用P2),是否为存储库管理器,已镜像的实际存储库ID(根据镜像规范)以及存储库类型未镜像。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)