मुझे यह मानना है कि मेरे पास कभी ने एक मेवेन प्लगइन लिखा है और आपका प्रश्न एक अच्छा सीखने के अभ्यास के रूप में देखा है। मैंने Maven Guide to Developing Java Plugins से भारी उधार लिया और maven-dependency-plugin से स्रोत कोड उधार लिया।
मैं इसके बारे में गलत हो सकता हूं लेकिन मुझे नहीं लगता कि आर्टिफैक्ट और रिपोजिटरी के बीच सीधी मैपिंग है जो मैवेन द्वारा कहीं भी संग्रहीत है।
मैं कुछ समय के लिए एक मेवेन उपयोगकर्ता रहा हूं और आप अक्सर दिए गए आर्टिफैक्ट के स्थान का पता लगाने के लिए हर रिमोट रिपोजिटरी से पूछताछ मेवेन देखते हैं। इसलिए, नीचे दिए गए मेरे कोड में आपको एक आर्टिफैक्ट के लिए एक ही यूआरएल नहीं मिलेगा, आपको रिमोट रिपोजिटरी के रूप में कई यूआरएल मिलेगा। आप आर्टिफैक्ट डाउनलोड करने और डाउनलोड सफल होने वाले यूआरएल को बनाए रखने के प्रयास के लिए हमेशा इस कोड का विस्तार कर सकते हैं।
मुझे आशा है कि इस मदद करता है।
package sample.plugin;
import java.util.List;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
/**
* Says "Hi" to the user.
* @goal sayhi
*/
public class GreetingMojo extends AbstractMojo {
/**
* @parameter expression="${localRepository}"
* @readonly
* @required
*/
protected ArtifactRepository local;
/**
* @parameter expression="${project.remoteArtifactRepositories}"
* @readonly
* @required
*/
protected List<ArtifactRepository> remoteRepos;
/**
* @component role="org.apache.maven.project.MavenProjectBuilder"
* @required
* @readonly
*/
protected MavenProjectBuilder mavenProjectBuilder;
/**
* @component
*/
protected ArtifactFactory factory;
/**
* @component
*/
protected MavenProject project;
public void execute() throws MojoExecutionException {
try {
resolveDependencies(project);
} catch (Exception ex) {
getLog().error(ex);
}
}
private void resolveDependencies(MavenProject theProject)
throws ArtifactResolutionException, ArtifactNotFoundException, InvalidDependencyVersionException, ProjectBuildingException {
Set<Artifact> artifacts = theProject.createArtifacts(this.factory, Artifact.SCOPE_TEST,
new ScopeArtifactFilter(Artifact.SCOPE_TEST));
for (Artifact a : artifacts) {
System.out.printf("%s : %s : %s\n", a.getGroupId(), a.getArtifactId(), a.getVersion());
for (ArtifactRepository r : remoteRepos) {
System.out.printf("%s/%s\n", r.getUrl(), r.pathOf(a));
}
System.out.println();
Artifact pomArtifact = this.factory.createArtifact(a.getGroupId(), a.getArtifactId(), a.getVersion(), "", "pom");
MavenProject pomProject = mavenProjectBuilder.buildFromRepository(pomArtifact, remoteRepos, local);
resolveDependencies(pomProject);
}
}
}
स्रोत
2010-08-09 08:19:36
यह सही दिशा में एक कदम है। मुझे अभी भी अंतिम पता नहीं मिला है, लेकिन कम से कम मुझे वैध उम्मीदवारों की एक सूची मिलती है। मुझे अपने उदाहरण पर मेवेनप्रोजेक्ट घटक के साथ कोई समस्या थी (इसे ठीक करने के लिए @parameter अभिव्यक्ति = "$ {project}" जोड़ना था)। – Thomas
मैवेन एपीआई का संस्करण 2.2.1 इंगित करता है कि आर्टिफैक्ट इंटरफेस एक आर्टिफैक्ट रिपोजिटरी वापस कर सकता है और आर्टिफैक्ट रिपोजिटरी इंटरफ़ेस में getUrl फ़ंक्शन है। उम्मीद है कि यह एक लाल हेरिंग^_^नहीं है – Thirlan