我正在尝试从使用Ivy迁移到在Grails 2.4项目中使用Aether解析器.
我遇到的问题与外部化凭据有关.与此相关的信息可以在Grails手册中找到:http://grails.org/doc/latest/guide/conf.html#dependencyRepositories
似乎没有一种记录方式可以像使用常春藤一样以外部方式使用Maven.
有了常春藤,我可以把这样的东西放到我的.grails/settings.groovy文件中:
grails.project.ivy.authentication = {
credentials {
realm = "My Repo"
host = "repo.mycustomrepo.com"
username = "user"
password = "password"
}
}
Run Code Online (Sandbox Code Playgroud)
要使用Aether,我不得不将凭证块直接放在我的BuildConfig.groovy喜欢中:
repositories {
inherits true // Whether to inherit repository definitions from plugins
grailsPlugins()
grailsHome()
mavenLocal()
grailsCentral()
mavenCentral()
mavenRepo("http://repo.mycustomrepo.com") {
//Add authentication details to repository connection
auth([
username: 'user',
password: 'password'
])
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这对我来说确实存在问题,因为在我的组织中我们使用Artifactory配置为使用我们的LDAP凭据.这是一个问题,因为我不想在源代码管理中提交我的凭据.
有没有未记录的解决方案,或者Grails不支持它吗?
我想以编程方式获取该POM文件的有效POM。具体来说,我想执行以下操作:
我不需要获得传递依赖。
我正在使用Maven Resolver Provider进行哪些工作。但是我必须使用包私有类org.apache.maven.repository.internal.DefaultModelResolver
这里是可以运行的示例Maven项目的GitHub链接:https : //github.com/sahilm/maven-resolver-test
该示例程序执行以下操作:
您可以使用以下程序运行该程序:
mvn exec:java -Dexec.mainClass="com.sahilm.maven_resolver_test.Test"
在Maven 2 mojo中,您可以使用类似的东西来获取依赖树:
DependencyNode rootNode;
try {
rootNode = treeBuilder.buildDependencyTree(project, localRepository,
artifactFactory, artifactMetadataSource, null, artifactCollector);
} catch (DependencyTreeBuilderException e) {
throw new MojoExecutionException("Failed to create dependency tree.", e);
}
final CollectingDependencyNodeVisitor visitor = new CollectingDependencyNodeVisitor();
rootNode.accept(visitor);
final List<DependencyNode> nodes = visitor.getNodes();
Run Code Online (Sandbox Code Playgroud)
什么是Maven 3等价物?在此期间ArtifactCollector,许多相关课程已被弃用(ArtifactMetadataSource等等).
我正在编写一个应用程序,要求我下载一个给定mavens groupid/artifactid/version的jar.
我目前开始
public Model pomToModel(String pomUrl) throws Exception {
URL url = new URL(pomUrl);
InputStream stream = url.openStream();
try {
Model model = new MavenXpp3Reader().read(stream);
return model;
} finally {
stream.close();
}
}
Run Code Online (Sandbox Code Playgroud)
所以给定POM的url,我现在有maven Model对象来表示它.这似乎运作良好.
我想知道的是两件事:
我已经有质量差的解决方案:我去mvnrepository.com手动编码url,我使用〜/ .m2/repository作为文件的前缀.我显然可以改进这个解决方案,但是我最终会很难复制经过充分测试并在maven代码库中使用的代码.
我真的很想知道如何使用maven类来做到这一点.
我已经做了相当多的谷歌搜索,但搜索maven和jar(甚至在stackoverflow)上的任何有趣的事情是我找到了很多关于如何使用maven的解决方案,而不是如何使用maven类进行编码.
谢谢您的帮助
这与其他问题类似(如此),但我希望能够使用最新的API执行此操作.maven-dependency-plugin:tree verbose选项已被弃用,并且在最新的(2.5.1)代码中没有做任何事情,所以没有很好的例子说明如何做到这一点.
我正在尝试构建一个单独的项目,该项目可以找到任何给定项目的 Maven 依赖项。我指的是 Aether 示例,但我找不到定义另一个项目以查找依赖项的方法。
如下图1所示,项目 1 具有项目 2 的依赖项,项目 2 具有项目 3 的依赖项。如果我在依赖项查找器上选择项目 1,它应该显示项目 1 的所有依赖项,即项目 2。

我指的是以下 Aether 代码片段,但我无法找到设置另一个项目的方法(通过设置 pom 文件或项目目录)
RepositorySystem system = Booter.newRepositorySystem();
RepositorySystemSession session = Booter.newRepositorySystemSession( system );
Artifact artifact = new DefaultArtifact( "org.eclipse.aether:aether-impl:1.0.0.v20140518" );
ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
descriptorRequest.setArtifact( artifact );
descriptorRequest.setRepositories( Booter.newRepositories( system, session ) );
ArtifactDescriptorResult descriptorResult = system.readArtifactDescriptor( session, descriptorRequest );
for ( Dependency dependency : descriptorResult.getDependencies() )
{
System.out.println( dependency );
}
Run Code Online (Sandbox Code Playgroud) 我的问题是有很大关系这一个
但我无法让它发挥作用.希望更多的关注它会有所帮助
我的环境
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 08:22:22-0700)
Maven home: /usr/local/maven
Java version: 1.8.0_40, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.3", arch: "x86_64", family: "mac"
Run Code Online (Sandbox Code Playgroud)
我正在使用maven 3.1所以我使用的是新的eclipse.aether,而不是sonatype.aether.
我的插件
package aether.example;
import java.util.List;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.repository.RemoteRepository;
@Mojo(name="test")
public class TestMojo extends AbstractMojo {
/**
* The entry point to Aether, i.e. the component doing all the …Run Code Online (Sandbox Code Playgroud) 如何以编程方式获取Maven模块在Maven执行环境之外的所有依赖项?
到目前为止,我有:
通过maven-core:
Path pomPath = ...;
MavenXpp3Reader reader = new MavenXpp3Reader();
try (InputStream is = Files.newInputStream(pomPath)) {
Model model = reader.read(is);
this.mavenProject = new MavenProject(model);
}
Run Code Online (Sandbox Code Playgroud)
并通过jcabi-aether:
File localRepo = Paths.get(System.getProperty("user.home"), ".m2").toFile();
new Classpath(mavenProject, localRepo, "runtime")
Run Code Online (Sandbox Code Playgroud)
到目前为止这一般是正确的吗?
现在的问题是我得到一个NullPointerException:
Caused by: java.lang.NullPointerException
at com.jcabi.aether.Aether.mrepos(Aether.java:197)
at com.jcabi.aether.Aether.<init>(Aether.java:140)
at com.jcabi.aether.Classpath.<init>(Classpath.java:125)
Run Code Online (Sandbox Code Playgroud)
因为mavenProject.getRemoteProjectRepositories()返回null.
如何初始化MavenProject以包含已配置的远程repos,同时考虑settings.xml文件(镜像,代理,存储库等)?
是否有一个不是mvn的maven客户端(maven发行版中包含的二进制文件)我可以用来从maven存储库中下载一个工件而不使用pom?我想使用Maven仓库为回购协议为我们的运营团队拿起构建(构建的包括快照),但我不想让他们不得不写作劲歌勾搭并在他们的声明依赖性.理想情况下,我正在寻找一个cli客户端,我可以通过repo url传递并协调和下载给定的工件.这样的事情是存在还是我最好为此写一个一次性的脚本?
我正在尝试使用 Maven 和 Jcabi-Aether 获取/解决一些工件。我想我已经准备好了大部分代码,但是我很难弄清楚如何加载用户,settings.xml以便我可以将 Maven 存储库加载到remotes变量中以供 Aether 使用:
import com.jcabi.aether.Aether;
import java.io.File;
import java.util.Arrays;
import org.apache.maven.project.MavenProject;
import org.sonatype.aether.artifact.Artifact;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.util.artifact.DefaultArtifact;
public class Main {
public static void main(String[] args) {
File local = new File("/tmp/local-repository");
Collection<RemoteRepository> remotes = Arrays.asList(
new RemoteRepository(
"maven-central",
"default",
"http://repo1.maven.org/maven2/"
)
);
Collection<Artifact> deps = new Aether(remotes, local).resolve(
new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
"runtime"
);
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以加载settings.xml和获取存储库信息?
aether ×11
java ×9
maven ×9
maven-3 ×3
grails ×1
grails-2.0 ×1
jcabi ×1
maven-2 ×1
repository ×1