2013-06-28 131 views
0

我一直无法找到有关此问题的具体答案。Maven插件依赖关系

我已经成功地安装修补的行家使用手动插件JAR文件(osxappbundle)执行以下操作:

mvn install:install-file -Dfile=osxappbundle-maven-plugin-1.0-alpha-4-SNAPSHOT.jar -Dpackaging=jar -DgroupId=org.codehaus.mojo -DartifactId=osxappbundle-maven-plugin -Dversion=1.0-alpha-4-SNAPSHOT -DgeneratePom=true 

当插件在POM,特别“束”的简称,我收到错误:

Unable to load the mojo 'bundle' in the plugin 'org.codehaus.mojo:osxappbundle-maven-plugin:1.0-alpha-4-SNAPSHOT'. A required call is missing: org/apache/velocity/exception/MethodInvocationException.

org.apache.velocity肯定是安装在我的本地程序存储库(.m2目录),但没有找到。如果我手动将类文件添加到它们被发现的jar文件中,所以这表明它不能使用本地存储库解决依赖关系。

我认为这是因为我手动安装了jar文件。

如果手动安装了jar,它是否只解析依赖关系,如果它们在jar中而不是在外面看?

该插件在这样的POM引用:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>osxappbundle-maven-plugin</artifactId> 
    <version>1.0-alpha-4-SNAPSHOT</version> 
    <configuration> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
       <goals> 
        <goal>bundle</goal> 
       </goals> 
     </execution> 
    </executions> 
</plugin> 
+2

向我们展示如何引用这个插件在POM – jtomaszk

+0

问题更新。 – CAM79

回答

3

插件的处理方式为项目依赖相同。原始插件在其pom.xml中引用的任何依赖关系都将在运行时放在类路径中。

通常在插件的pom.xml中更改<version>标记并运行mvn install就足够了。这会将jar和pom文件安装到本地存储库。使用一个明确表示它不是正式版本的版本,例如1.2.3-CUSTOM-SNAPSHOT。然后在应用程序的pom文件中将依赖关系更改为此版本,并且它应该按预期工作。

如果因任何原因必须直接使用invoke install插件,则应始终在jar文件中安装合适的pom.xml。使用-DpomFile=/path/to/pom.xml指定正确的pom插件的路径。 -DgeneratePom=true只会生成一个简约的pom,如果这个工件和版本在版本库中还没有pom.xml。这个pom文件不会指定任何依赖关系。所以如果你的jar/plugin有任何依赖关系,请不要使用这个选项。

参考文献:

+0

我很困惑 - 你认为OP做错了什么? OP在命令行中包含'-DgeneratePom = true'。 –

+0

据我了解这个问题,OP正试图用自己的实现来替换已经工作过的插件。原来的插件似乎依赖于其他未加载的jar,因为修改后的插件使用生成的“pom.xml”而不是带有正确的“dependencies”部分的pom。 – nif

+0

这是一个很好的回答 - 试着将这些措辞编成你答案的正文,因为这不是你的意思。 –