2009-09-17 11 views
18

मेरे पास एक मेवेन प्लगइन है जो एक समूह आईडी, artifactId, और संस्करण को अपने confiugration में लेता है।मैं प्लगइन के भीतर मेवेन कलाकृतियों को कैसे डाउनलोड कर सकता हूं?

मैं रिमोट रिपॉजिटरीज़ से उस आर्टिफैक्ट को डाउनलोड करने में सक्षम होना चाहता हूं और फ़ाइल को प्रोजेक्ट में कॉपी करना चाहता हूं। हालांकि मैं आर्टिफैक्ट को डाउनलोड करने का तरीका नहीं समझ सकता।

मैं समझता हूं कि मैं निर्भरता प्लगइन का उपयोग कर निर्भरताओं को हल कर सकता हूं, लेकिन मुझे अपनी प्लगइन के अंदर होने की आवश्यकता है। मैं यह कैसे कर सकता हूँ?

उत्तर

24

आपकी प्लगइन को आर्टिफैक्ट फैक्टरी और समूह आईडी, आर्टिफैक्ट आईडी और बूटस्ट्रैप होने के लिए आर्टिफैक्ट का संस्करण का उपयोग करके आर्टिफैक्ट बनाने की आवश्यकता है, फिर खोज/डाउनलोड को संभालने के लिए आर्टिफैक्ट रीसोलवर को उस आर्टिफैक्ट को पास करें।

रिज़ॉल्यूवर को स्थानीय भंडार और दूरस्थ भंडारों तक पहुंच की आवश्यकता है। अच्छी खबर यह है कि वे सभी प्लेक्सस घटक हैं जिन्हें आप अपने मोजो में निर्भरता के रूप में घोषित कर सकते हैं और उनके लिए प्लेक्सस तार बना सकते हैं।

another answer में मैंने दिखाया कि यह कैसे करें। आपके मामले में आपको समूह आईडी, artifactId और संस्करण पढ़ने के लिए थोड़ा अलग पैरामीटर के साथ एक कट-डाउन संस्करण की आवश्यकता है। नीचे दी गई प्लगइन में, विभिन्न घटकों को प्लेक्सस घटकों के रूप में घोषित किया जाता है, और गुण समूह, artifactId, संस्करण, और पैकेजिंग प्रकार घोषित करने के गुण।

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>name.seller.rich</groupId> 
    <artifactId>bootstrap-test</artifactId> 
    <version>1.0.0</version> 
    <build> 
     <plugins> 
     <plugin> 
      <groupId>name.seller.rich</groupId> 
      <artifactId>maven-bootstrap-plugin</artifactId> 
      <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
       <goal>bootstrap</goal> 
       </goals> 
       <configuration> 
       <bootstrapGroupId>org.aspectj</bootstrapGroupId> 
       <bootstrapArtifactId>aspectjrt</bootstrapArtifactId> 
       <bootstrapVersion>1.6.4</bootstrapVersion> 
       <bootstrapType>pom</bootstrapType> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
+0

वाह, धन्यवाद:

package name.seller.rich.maven.plugins.bootstrap; import java.util.List; 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.ArtifactResolver; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * Obtain the artifact defined by the groupId, artifactId, and version * from the remote repository. * * @goal bootstrap */ public class BootstrapAppMojo extends AbstractMojo { /** * Used to look up Artifacts in the remote repository. * * @parameter expression= * "${component.org.apache.maven.artifact.factory.ArtifactFactory}" * @required * @readonly */ protected ArtifactFactory factory; /** * Used to look up Artifacts in the remote repository. * * @parameter expression= * "${component.org.apache.maven.artifact.resolver.ArtifactResolver}" * @required * @readonly */ protected ArtifactResolver artifactResolver; /** * List of Remote Repositories used by the resolver * * @parameter expression="${project.remoteArtifactRepositories}" * @readonly * @required */ protected List remoteRepositories; /** * Location of the local repository. * * @parameter expression="${localRepository}" * @readonly * @required */ protected ArtifactRepository localRepository; /** * The target pom's artifactId * * @parameter expression="${bootstrapArtifactId}" * @required */ private String bootstrapArtifactId; /** * The target pom's groupId * * @parameter expression="${bootstrapGroupId}" * @required */ private String bootstrapGroupId; /** * The target pom's type * * @parameter expression="${bootstrapType}" * @required */ private String bootstrapType; /** * The target pom's version * * @parameter expression="${bootstrapVersion}" * @required */ private String bootstrapVersion; public void execute() throws MojoExecutionException, MojoFailureException { try { Artifact pomArtifact = this.factory.createArtifact( bootstrapGroupId, bootstrapArtifactId, bootstrapVersion, "", bootstrapType); artifactResolver.resolve(pomArtifact, this.remoteRepositories, this.localRepository); } catch (ArtifactResolutionException e) { getLog().error("can't resolve parent pom", e); } catch (ArtifactNotFoundException e) { getLog().error("can't resolve parent pom", e); } } } 

यह एक पोम प्लगइन का उपयोग करने के लिए (और डाउनलोड aspectjrt 1.6.4 पोम) कॉन्फ़िगर का एक उदाहरण है। मैं इसे –

+0

फिर से धन्यवाद देने का प्रयास करूंगा, यह अच्छी तरह से काम करता है। डाउनलोड की गई फ़ाइल के लिए मेवेन प्रोजेक्ट पाने का एक अच्छा तरीका क्या है? –

+0

अच्छी तरह से यह वास्तव में एक अलग प्रश्न है: -/ –

संबंधित मुद्दे