[英]Maven 3 - Distribute custom plugin in a .jar?
完成Maven newb,請原諒任何濫用的術語等。
我在Maven 3中構建了一個自定義插件(一個定義git rebase目標的插件)。 我能夠:
mvn install
沒問題。 然后我可以從命令行調用目標:
mvn edu.clemson.cs.rsrg:git-plugin:rebase
一切都是金色的。 我有一個可愛的git-plugin-XXX.jar文件,位於我的target
目錄中。
我想讓我的自定義目標可用於另一個項目,這樣當開發團隊的其他成員拉下該項目的源時,他們就可以免費獲得我的插件(或者至少在mvn build
)。
我的理解是,純粹的解決方案是為該組設置一個maven repo並在那里加載我的插件,但這對於一個hacky插件來說似乎有些過分。
思考?
到目前為止,我通過三個不同的插件玩過它:
addjars-maven-plugin:add-jars
\n <插件>\n <的groupId> com.googlecode.addjars-行家-插件</的groupId>\n <artifactId的> addjars-行家-插件</ artifactId的>\n <版本> 1.0.4 </版本>\n <處決>\n <執行>\n <目標>\n <目標>的附加罐</目標>\n </目標>\n <結構>\n <資源>\n <資源>\n <目錄> $ {BASEDIR} /插件</目錄>\n </資源>\n </資源>\n </配置>\n </執行>\n </處決>\n </插件>\n
在mvn build
期間給我這個錯誤:
[ERROR] Error resolving version for plugin 'edu.clemson.cs.rsrg:git-plugin' from the repositories [local (/home/hamptos/.m2/repository), central (http://repo.maven.apache.org/maven2)]: Plugin not found in any plugin repository
它還會導致我以后的格式化插件失敗。 (顯然,它讀取了jar並確定了組名/插件名稱,但它會在我的本地倉庫中查找它嗎?當然它不在那里 - 我正在嘗試安裝它。)
build-helper:attach-artifacts
\n <插件>\n <的groupId> org.codehaus.mojo </的groupId>\n <artifactId的>構建輔助-行家-插件</ artifactId的>\n <版本> 1.7 </版本>\n <處決>\n <執行>\n <ID>附的工件</ ID>\n <階段>安裝</相位>\n <目標>\n <目標>附加偽影</目標>\n </目標>\n <結構>\n <工件>\n <工件>\n <文件> $ {BASEDIR} /plugins/git-plugin-0.1.0a.jar </ FILE>\n <類型>罐</類型>\n </偽影>\n </偽影>\n </配置>\n </執行>\n </處決>\n </插件>\n
在mvn build
期間給我這個錯誤:
[ERROR] Failed to execute goal org.codehaus.mojo:build-helper-maven-plugin:1.7:attach-artifact (attach-artifacts) on project RESOLVE: Execution attach-artifacts of goal org.codehaus.mojo:build-helper-maven-plugin:1.7:attach-artifact failed: For artifact {edu.clemson.cs.rsrg:RESOLVE:12.09.01a:jar}: An attached artifact must have a different ID than its corresponding main artifact.
(解決方案:12.09.01a是主要項目。顯然這里有些東西出了問題,因為插件和主要項目肯定有不同的artifactIDs。嘗試將項目附加在自己的頂部可能?)
maven-install-plugin:install-file
\n <插件>\n <的groupId> org.apache.maven.plugins </的groupId>\n <artifactId的>行家安裝-插件</ artifactId的>\n <版本> 2.3.1 </版本>\n <處決>\n <執行>\n <ID>安裝-GIT-插件</ ID>\n <階段>初始化</相位>\n <目標>\n <目標>安裝文件</目標>\n </目標>\n <結構>\n <文件> $ {BASEDIR} /plugins/git-plugin-0.1.0a.jar </ FILE>\n <包裝>罐</包裝>\n <的groupId> edu.clemson.cs.rsrg </的groupId>\n <artifactId的> GIT-插件</ artifactId的>\n <版本> 0.1.0a </版本>\n </配置>\n </執行>\n </處決>\n </插件>\n
似乎工作正常,直到我嘗試調用其中一個目標,如mvn edu.clemson.cs.rsrg:git-plugin:rebase
,此時它給了我這個錯誤:
[ERROR] Failed to execute goal edu.clemson.cs.rsrg:git-plugin:0.1.0a:rebase (default-cli) on project RESOLVE: Execution default-cli of goal edu.clemson.cs.rsrg:git-plugin:0.1.0a:rebase failed: Unable to load the mojo 'rebase' (or one of its required components) from the plugin 'edu.clemson.cs.rsrg:git-plugin:0.1.0a': com.google.inject.ProvisionException: Guice provision errors: [ERROR] [ERROR] 1) Error in ComponentFactory:ant-mojo [ERROR] at ClassRealm[plugin>edu.clemson.cs.rsrg:git-plugin:0.1.0a, parent: sun.misc.Launcher$AppClassLoader@e776f7] [ERROR] while locating org.apache.maven.plugin.Mojo annotated with @com.google.inject.name.Named(value=edu.clemson.cs.rsrg:git-plugin:0.1.0a:rebase)
你可能認為它很黑,但它是maven的方式。 它需要部署到maven倉庫。
如果你將它保存在一個你可以證明擁有的groupId中,並且它是開源的,你可以將它發布到central
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.