2010-11-22 15 views
6

मैं प्रोग्राम के Maven-निर्भरता-प्लगइन को लागू करने की कोशिश कर रहा हूँ आह्वान करने के लिए। मैं maven 3 संस्करण का उपयोग कर रहा हूँ।कैसे प्रोग्राम के एक Maven निर्भरता प्लगइन

[ERROR] **The parameters 'project', 'local', 'remoteRepos', 
'reactorProjects' for goal 
org.apache.maven.plugins:maven-dependency-plugin:2.1:unpack are 
missing or invalid** 
**org.apache.maven.plugin.PluginParameterException: The parameters 'project', 
'local', 'remoteRepos', 'reactorProjects' for goal 
org.apache.maven.plugins:maven-dependency-plugin:2.1:unpack are missing or 
invalid** 
     at org.apache.maven.plugin.internal.DefaultMavenPluginManager 
     .populatePluginFields(DefaultMavenPluginManager.java:518) 
     at org.apache.maven.plugin.internal.DefaultMavenPluginManager 
     .getConfiguredMojo(DefaultMavenPluginManager.java:471) 
     at org.apache.maven.plugin.DefaultBuildPluginManager 
     .executeMojo(DefaultBuildPluginManager.java:99) 
     at com.sap.ldi.qi.osgi.OSGiManifesrMfHandlerMojo 
     .invokeMavenDependencyPlugin(OSGiManifesrMfHandlerMojo.java:139) 
     at com.sap.ldi.qi.osgi.OSGiManifesrMfHandlerMojo 
     .execute(OSGiManifesrMfHandlerMojo.java:100) 
     at org.apache.maven.plugin.DefaultBuildPluginManager 
     .executeMojo(DefaultBuildPluginManager.java:110) 
     at org.apache.maven.lifecycle.internal.MojoExecutor 
     .execute(MojoExecutor.java:144) 
     at org.apache.maven.lifecycle.internal.MojoExecutor 
     .execute(MojoExecutor.java:87) 
     at org.apache.maven.lifecycle.internal.MojoExecutor 
     .execute(MojoExecutor.java:79) 
-- many lines stripped from stack trace -- 
[INFO] ---------------------------------------------------------------------- 
[INFO] BUILD FAILURE 
[INFO] ---------------------------------------------------------------------- 
[INFO] Total time: 17.938s 
[INFO] Finished at: Mon Nov 22 10:27:42 EET 2010 
[INFO] Final Memory: 12M/23M 
[INFO] ---------------------------------------------------------------------- 
[ERROR] Failed to execute goal 
com.sap.ldi.qi:osgi-manifest-handler-plugin:0.0.1-SNAPSHOT:handle 
(osgi-manifest-handler plugin) on project com.sap.ldi.demo.calc 
.cmd.tests: The parameters 'project', 'local', 'remoteRepos', 
'reactorProjects' for goal 
org.apache.maven.plugins:maven-dependency-plugin:2.1:unpack are missing 
or invalid -> [Help 1] 
-- stripped rest -- 

मुझे पता है के रूप में, Maven निर्भरता प्लगइन का खोल लक्ष्य के लिए केवल आवश्यक पैरामीटर artifactItems है: समस्या यह है कि जब मैं pluginManager.executeMojo (सत्र, निष्पादन) के माध्यम से यह आह्वान, मैं निम्नलिखित त्रुटि संदेश प्राप्त होता है । मैं प्लगइनExecution.set कॉन्फ़िगरेशन() विधि का उपयोग करके प्लगइन कॉन्फ़िगरेशन सेट करता हूं। ऐसा लगता है कि यह प्लगइन विन्यास सही ढंग से सेट नहीं है। क्या आपको कोई विचार है कि यह अपवाद क्यों फेंक दिया गया है?

<configuration> 
    <artifactItems> 
    <artifactItem> 
     <groupId>com.sap.ldi.demo.calc</groupId> 
     <artifactId>com.sap.ldi.demo.calc.cmd</artifactId> 
     <version>0.1.2-SNAPSHOT</version> 
     <type>jar</type> 
     <overWrite>true</overWrite> 
     <outputDirectory>target/demo-calc-stuff</outputDirectory> 
     <includes>**/*.*</includes> 
    </artifactItem> 
    </artifactItems> 
</configuration> 

धन्यवाद

मेरी तरफ से

एक सुधार:

यहाँ विन्यास है कि मैं का उपयोग कर रहा है। प्रयुक्त मैवेन संस्करण मैवेन 3.0 नहीं है लेकिन मेवेन 3.0-बीटा -1 है। मुझे लगता है कि संस्करण 3.0-बीटा -1 में BuildPluginManager.loadPlugin() में दो तर्क हैं, और संस्करण 3.0 में एक ही विधि में तीन हैं। मैं सोच रहा हूं, क्या किसी ने मैवेन 3.0 या मैवेन 3.0-बीटा -1 के साथ प्रोग्रामिक रूप से एक मेवेन प्लगइन का आह्वान करने की कोशिश की है। मैं अभी भी इसे मैवेन 3.0-बीटा -1 के साथ आमंत्रित करने की कोशिश कर रहा हूं, लेकिन यह अभी भी उपरोक्त चिपकने वाला अपवाद देता है।

उत्तर

0

Maven प्लगइन्स प्रोग्राम के रूप में लागू किया जा करने के लिए नहीं होती हैं।

वे मान कि अंतर्निहित जाल कंटेनर से इंजेक्ट किया जाता पर भरोसा करते हैं।

तो या तो आप पता लगाने के लिए उन मूल्यों को इंजेक्षन करने के लिए या आप डिफ़ॉल्ट तंत्र पर भरोसा करना होगा होगा।

एक बात आप उपयोग कर सकते Maven Invoker है। इसके साथ, आप प्रोग्रामेटिक रूप से मैवेन लाइफसाइकिल लॉन्च कर सकते हैं, लेकिन वे एक अलग वीएम में निष्पादित होंगे। इसलिए यदि आपको मॉडल को पहले से गतिशील रूप से बदलने की ज़रूरत है, तो आपको मॉडल को अस्थायी pom.xml पर क्रमबद्ध करने और मैवेन इनवॉकर के साथ इसका उपयोग करने की आवश्यकता होगी। यह भारी चीजें है, लेकिन मैंने इसे दो साल पहले सफलतापूर्वक किया है।

+1

मैंने सोचा कि BuildPluginManager.executeMojo() इस तरह के उपयोग के मामलों के लिए है। मुझे निम्न लिंक भी मिला, यह बताते हुए कि मैवेन प्लगइन्स को प्रोग्रामिक रूप से कैसे आमंत्रित किया जाए: http://code.google।com/p/mojo-execor/ – moisko

+0

ऐसा लगता है कि उपयोग किया गया कार्यान्वयन मैवेन 2 के लिए है, लेकिन डॉन ब्राउन उसी विचार का उपयोग कर रहा है जैसा कि – moisko

+0

से ऊपर बताया गया है http://stackoverflow.com/questions/526733/maven-plugin-executing- एक और प्लगइन - यह पोस्ट करने का लिंक है जिसके बारे में मैं बात कर रहा हूं। – moisko

2

दोस्तों, मुझे लगता है कि मुझे यह मिल गया। समस्या मैवेन के संस्करण में नहीं है जिसका मैं उपयोग कर रहा हूं। यह विन्यास में है कि मैं maven- निर्भरता-प्लगइन का आह्वान करने के लिए उपयोग कर रहा हूँ। artifactItems, स्थानीय, परियोजना, reactorProjects और remoteRepos: Maven-निर्भरता-प्लगइन का खोल लक्ष्य निम्नलिखित मानकों की आवश्यकता है।

<configuration> 
    <artifactItems> 
    <artifactItem> 
     <groupId>com.sap.ldi.demo.calc</groupId> 
     <artifactId>com.sap.ldi.demo.calc.cmd</artifactId> 
     <version>0.1.3-SNAPSHOT</version> 
     <type>jar</type> 
     <overWrite>true</overWrite> 
     <outputDirectory>target/demo-calc-stuff</outputDirectory> 
     <includes>**/*.*</includes> 
    </artifactItem> 
    </artifactItems> 
    <local>${localRepository}</local> 
    <project>${project}</project> 
    <reactorProjects>${reactorProjects}</reactorProjects> 
    <remoteRepos>${project.remoteArtifactRepositories}</remoteRepos> 
</configuration>` 
+0

वाह, अच्छा लग रहा है (+1) –

+0

समस्या यह है कि मेवेन आपको बता रहा है कि आप मेवेन-निर्भरता-प्लगइन का आह्वान करने के लिए आवश्यक तर्कों का पूरा सेट उपयोग नहीं कर रहे हैं: अनपैक करें, लेकिन यह खोजना इतना आसान नहीं है कि क्या हैं इन टैग तत्वों के संभावित मूल्य। इन मानों को खोजने और कॉन्फ़िगरेशन बनाने के लिए मुझे डीबग मोड में pom.xml के माध्यम से प्लगइन का आह्वान करना पड़ा। – moisko

10

यहाँ Maven 3 के लिए बनाया गया मोजो निर्वाहक के एक अद्यतन संस्करण है:: यहाँ प्लगइन लागू के लिए इस्तेमाल किया विन्यास का सही संस्करण है

package com.googlecode.boostmavenproject; 

import java.util.Collections; 
import org.apache.maven.execution.MavenSession; 
import org.apache.maven.model.Plugin; 
import org.apache.maven.plugin.MojoExecution; 
import org.apache.maven.plugin.MojoExecutionException; 
import org.apache.maven.plugin.descriptor.PluginDescriptor; 
import org.apache.maven.project.MavenProject; 
import org.codehaus.plexus.util.xml.Xpp3Dom; 
import org.apache.maven.plugin.BuildPluginManager; 
import org.apache.maven.plugin.descriptor.MojoDescriptor; 
import org.codehaus.plexus.configuration.PlexusConfiguration; 
import org.codehaus.plexus.util.xml.Xpp3DomUtils; 
import org.sonatype.aether.repository.RemoteRepository; 

/** 
* Executes an arbitrary mojo using a fluent interface. This is meant to be executed within the context of a Maven 2 
* mojo. 
* 
* Here is an execution that invokes the dependency plugin: 
* <pre> 
* executeMojo(
*    plugin(
*      groupId("org.apache.maven.plugins"), 
*      artifactId("maven-dependency-plugin"), 
*      version("2.0") 
*    ), 
*    goal("copy-dependencies"), 
*    configuration(
*      element(name("outputDirectory"), "${project.build.directory}/foo") 
*    ), 
*    executionEnvironment(
*      project, 
*      session, 
*      pluginManager 
*    ) 
*   ); 
* </pre> 
* @see http://code.google.com/p/mojo-executor/ 
*/ 
public class MojoExecutor 
{ 
    /** 
    * Entry point for executing a mojo 
    * 
    * @param plugin The plugin to execute 
    * @param goal The goal to execute 
    * @param configuration The execution configuration 
    * @param env The execution environment 
    * @throws MojoExecutionException If there are any exceptions locating or executing the mojo 
    */ 
    public static void executeMojo(Plugin plugin, String goal, Xpp3Dom configuration, 
                   ExecutionEnvironment env) throws MojoExecutionException 
    { 
     if (configuration == null) 
      throw new NullPointerException("configuration may not be null"); 
     try 
     { 
      MavenSession session = env.getMavenSession(); 

      PluginDescriptor pluginDescriptor = env.getPluginManager().loadPlugin(plugin, 
       Collections.<RemoteRepository>emptyList(), session.getRepositorySession()); 
      MojoDescriptor mojo = pluginDescriptor.getMojo(goal); 
      if (mojo == null) 
      { 
       throw new MojoExecutionException("Could not find goal '" + goal + "' in plugin " 
                       + plugin.getGroupId() + ":" 
                       + plugin.getArtifactId() + ":" 
                       + plugin.getVersion()); 
      } 
      configuration = Xpp3DomUtils.mergeXpp3Dom(configuration, 
       toXpp3Dom(mojo.getMojoConfiguration())); 
      MojoExecution exec = new MojoExecution(mojo, configuration); 
      env.getPluginManager().executeMojo(session, exec); 
     } 
     catch (Exception e) 
     { 
      throw new MojoExecutionException("Unable to execute mojo", e); 
     } 
    } 

    /** 
    * Converts PlexusConfiguration to a Xpp3Dom. 
    * 
    * @param config the PlexusConfiguration 
    * @return the Xpp3Dom representation of the PlexusConfiguration 
    */ 
    private static Xpp3Dom toXpp3Dom(PlexusConfiguration config) 
    { 
     Xpp3Dom result = new Xpp3Dom(config.getName()); 
     result.setValue(config.getValue(null)); 
     for (String name: config.getAttributeNames()) 
      result.setAttribute(name, config.getAttribute(name)); 
     for (PlexusConfiguration child: config.getChildren()) 
      result.addChild(toXpp3Dom(child)); 
     return result; 
    } 

    /** 
    * Constructs the {@link ExecutionEnvironment} instance fluently 
    * @param mavenProject The current Maven project 
    * @param mavenSession The current Maven session 
    * @param pluginManager The Build plugin manager 
    * @return The execution environment 
    * @throws NullPointerException if mavenProject, mavenSession or pluginManager 
    * are null 
    */ 
    public static ExecutionEnvironment executionEnvironment(MavenProject mavenProject, 
                                MavenSession mavenSession, 
                                BuildPluginManager pluginManager) 
    { 
     return new ExecutionEnvironment(mavenProject, mavenSession, pluginManager); 
    } 

    /** 
    * Builds the configuration for the goal using Elements 
    * @param elements A list of elements for the configuration section 
    * @return The elements transformed into the Maven-native XML format 
    */ 
    public static Xpp3Dom configuration(Element... elements) 
    { 
     Xpp3Dom dom = new Xpp3Dom("configuration"); 
     for (Element e: elements) 
      dom.addChild(e.toDom()); 
     return dom; 
    } 

    /** 
    * Defines the plugin without its version 
    * @param groupId The group id 
    * @param artifactId The artifact id 
    * @return The plugin instance 
    */ 
    public static Plugin plugin(String groupId, String artifactId) 
    { 
     return plugin(groupId, artifactId, null); 
    } 

    /** 
    * Defines a plugin 
    * @param groupId The group id 
    * @param artifactId The artifact id 
    * @param version The plugin version 
    * @return The plugin instance 
    */ 
    public static Plugin plugin(String groupId, String artifactId, String version) 
    { 
     Plugin plugin = new Plugin(); 
     plugin.setArtifactId(artifactId); 
     plugin.setGroupId(groupId); 
     plugin.setVersion(version); 
     return plugin; 
    } 

    /** 
    * Wraps the group id string in a more readable format 
    * @param groupId The value 
    * @return The value 
    */ 
    public static String groupId(String groupId) 
    { 
     return groupId; 
    } 

    /** 
    * Wraps the artifact id string in a more readable format 
    * @param artifactId The value 
    * @return The value 
    */ 
    public static String artifactId(String artifactId) 
    { 
     return artifactId; 
    } 

    /** 
    * Wraps the version string in a more readable format 
    * @param version The value 
    * @return The value 
    */ 
    public static String version(String version) 
    { 
     return version; 
    } 

    /** 
    * Wraps the goal string in a more readable format 
    * @param goal The value 
    * @return The value 
    */ 
    public static String goal(String goal) 
    { 
     return goal; 
    } 

    /** 
    * Wraps the element name string in a more readable format 
    * @param name The value 
    * @return The value 
    */ 
    public static String name(String name) 
    { 
     return name; 
    } 

    /** 
    * Constructs the element with a textual body 
    * @param name The element name 
    * @param value The element text value 
    * @return The element object 
    */ 
    public static Element element(String name, String value) 
    { 
     return new Element(name, value); 
    } 

    /** 
    * Constructs the element containg child elements 
    * @param name The element name 
    * @param elements The child elements 
    * @return The Element object 
    */ 
    public static Element element(String name, Element... elements) 
    { 
     return new Element(name, elements); 
    } 

    /** 
    * Element wrapper class for configuration elements 
    */ 
    public static class Element 
    { 
     private final Element[] children; 
     private final String name; 
     private final String text; 

     public Element(String name, Element... children) 
     { 
      this(name, null, children); 
     } 

     public Element(String name, String text, Element... children) 
     { 
      this.name = name; 
      this.text = text; 
      this.children = children; 
     } 

     public Xpp3Dom toDom() 
     { 
      Xpp3Dom dom = new Xpp3Dom(name); 
      if (text != null) 
      { 
       dom.setValue(text); 
      } 
      for (Element e: children) 
      { 
       dom.addChild(e.toDom()); 
      } 
      return dom; 
     } 
    } 

    /** 
    * Collects Maven execution information 
    */ 
    public static class ExecutionEnvironment 
    { 
     private final MavenProject mavenProject; 
     private final MavenSession mavenSession; 
     private final BuildPluginManager pluginManager; 

     public ExecutionEnvironment(MavenProject mavenProject, MavenSession mavenSession, 
                   BuildPluginManager pluginManager) 
     { 
      if (mavenProject == null) 
       throw new NullPointerException("mavenProject may not be null"); 
      if (mavenSession == null) 
       throw new NullPointerException("mavenSession may not be null"); 
      if (pluginManager == null) 
       throw new NullPointerException("pluginManager may not be null"); 
      this.mavenProject = mavenProject; 
      this.mavenSession = mavenSession; 
      this.pluginManager = pluginManager; 
     } 

     public MavenProject getMavenProject() 
     { 
      return mavenProject; 
     } 

     public MavenSession getMavenSession() 
     { 
      return mavenSession; 
     } 

     public BuildPluginManager getPluginManager() 
     { 
      return pluginManager; 
     } 
    } 
} 

मैं अपने परिवर्तनों को वापस योगदान करने का प्रयास करेंगे आधिकारिक मोजो कार्यकारी प्लगइन में।

+6

मैं मोजो एक्ज़ीक्यूटिव लाइब्रेरी का वर्तमान रखरखाव हूं। गिली ने मुझे अपने पैच किए गए संस्करण के बारे में बताने के लिए संपर्क किया। अब इसे परियोजना की मास्टर शाखा में https://github.com/TimMoore/mojo-executor पर शामिल किया गया है और संस्करण 2.0-स्नैपशॉट के रूप में तैनात किया गया है । यदि कोई मेवेन 3 उपयोगकर्ता इसका परीक्षण कर सकता है और मुझे कोई समस्या है (अधिमानतः गिटहब साइट पर मुद्दों को दर्ज करके), तो यह वास्तव में सहायक होगा। धन्यवाद! –

+0

हां, Mojo निष्पादक प्लगइन महान है! – JodaStephen

+0

@Gili हाय क्या आप मुझे बता सकते हैं कि मैं इन क्षेत्रों को कैसे शुरू कर सकता हूं? MavenProject mavenProject; MavenSession maven सत्र; BuildPluginManager प्लगइन प्रबंधक; –

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