2011-06-02 51 views
2

我想要一個應用程序/腳本,可用於從給定的Maven工件執行獨立的Java應用程序(即具有主要方法的基本類)。根據我的研究,目前還沒有這樣的東西,但我想我會向社區提問,看看有沒有人知道可以支持我需求的項目。自動從Maven下載並運行獨立的Java應用程序

這個想法是我可以通過配置文件或命令行傳遞Maven工件規範(組ID,工件ID和版本)以及完全限定的類名和參數列表。然後下載給定的工件及其所有依賴關係(或者,如果它們已經存在於本地回購中),並且應用程序將以適當的類路徑啓動。

在這一點上,我認爲實現一個使用Aether library和Java的ProcessBuilder執行此操作的系統並不是太困難,但我想知道是否有其他人知道在我開始之前已經處理了這個問題的現有項目重新發明輪子。

+0

我已經完成了一個非常接近的東西,有一個POM文件,它指定了您想要作爲依賴項運行的類的項目。然後運行「mvn package」,然後運行「mvn exec:java」來運行該類。 要做到這一點的任意類將需要動態修改該pom文件。 – Chris 2011-06-02 22:28:21

+0

@克里斯這是一個好主意,正如其他幾個人指出的那樣。我只是把一個快速的pom作爲一個概念驗證,你甚至不需要運行「mvn package」。我將虛擬項目的包裝設置爲「pom」,並直接運行「mvn exec:java」。 – 2011-06-02 22:49:38

+0

這就是堆棧溢出真正開始工作的地方:感謝幫助我! – Chris 2011-06-03 02:15:01

回答

3

也許這是顯而易見的,但爲什麼不執行exec插件? http://mojo.codehaus.org/exec-maven-plugin/

mvn exec:java -Dexec.mainClass=com.project.App 

如果com.project.App是另一個罐子的一部分,你將它作爲像通常那樣依賴。

+0

我不知道爲什麼我沒有想到這一點。我使用exec插件來運行當前項目中的類,但是甚至沒有想到只是將我的目標工件添加爲單個依賴項。我很高興在編寫自己的實現之前提出這個問題。謝謝! – 2011-06-02 22:47:10

+0

我剛剛意識到這個解決方案的一個缺點就是STDOUT與所有Maven輸出混淆起來。這不是一個大問題,但它確實使我的具體應用程序不太適合。 – 2011-06-02 22:55:33

+0

是的......但是這整個方法(使用Maven作爲執行一次性命令的安裝程序兼執行程序)是笨重和低效的:所有下載插件和依賴關係。有更好的方法;例如JNLP或下載可執行的uber-JAR文件。 – 2011-06-03 01:07:43

2

使用Maven運行應用程序非常簡單。我想知道這是你正在看的東西還是我錯了?

mvn exec:java -Dexec.mainClass="com.test.foo.Main" -Dexec.args="arg1 arg2..." 
0

我剛推到Maven Central的Installation plugin。它允許從存儲庫安裝和執行工件,並且不需要項目。

它非常類似於打包像百勝,容易或寶石經理:

mvn installation:install -Dartifact=groupId:artifactId

這將創建的道路上提供一個快捷方式到您的類。

+0

這看起來不錯。我們實際上最終在mvn之外編寫了我們自己的小實用程序來做類似的事情。 mvn命令需要很長時間才能運行,即使插件沒有做任何我們完全放棄它的工作,只是寫了一些bash腳本來完成下載並設置類路徑。這不是完全一般的目的,但它對我們來說很好。 – 2013-10-03 03:32:23

+0

那麼,安裝總是需要時間:-)安裝該工具後,它會創建快捷方式,並在Maven之外的系統上運行。 – 2013-10-03 07:57:37

相關問題