簡體   English   中英

直接從 Maven 存儲庫執行 JAR 文件

[英]Executing a JAR file straight from a Maven repository

假設我們有一個 Java應用程序,而不是一個庫,它可以通過 Maven 中心獲得。 例如,一個這樣的項目是jol ,它在 Maven central 中有其對應的 CLI 接口。

據我所知,與庫的主要區別在於相應的 JAR 文件包含一個具有適當main()方法的類,以及可選的 JAR 清單中的相關Main-Class:標頭。 如果這樣的工件被用作項目的依賴項,Maven 會很高興地將 JAR 文件連同它的依賴項一起下載到本地存儲庫,就像它為任何其他工件所做的那樣。

是否可以使用Maven直接執行這樣的應用程序,而無需設置Maven項目?

exec:java插件通過設置 JVM 類路徑使依賴項可用,從而很好地適用於本地項目。 用戶不必擔心 JAR 或.class文件位置等。 不幸的是,據我所知,它還需要一個封閉的 Maven 項目,因此不能在任意命令行提示符下使用它。

不,Maven 不會做你所要求的。 它是一個構建工具,旨在基於描述項目的 pom.xml 文件構建 Java 項目。

因此,如果沒有 pom.xml 文件,您將無法運行 Maven 構建。 如果你有一個 pom.xml,那么根據定義,你已經“建立了一個 Maven 項目”。

正如@DaveNewton 所說,您應該能夠設置一個非常小的 pom.xml,其中包含相關 jar 文件的依賴項和 exec-maven 插件。 我擔心它不會變得比這更簡單。

使用 Maven 3 的一個hacky 解決方案是將 Maven Dependency Plugin 與 Maven Help Plugin 結合使用來解析本地存儲庫路徑:

# Download JAR from Maven repo
mvn dependency:get -DremoteRepositories=http://repo1.maven.org/maven2/ \
                   -DgroupId=some.group.id \
                   -DartifactId=some-artifact-cli \
                   -Dversion=1.0.0 \
                   -Dtransitive=false

# Resolve local repository path
MVN_REPO=$(mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout)

# Execute JAR from the local repository
java -jar $MVN_REPO/some/group/id/some-artifact-cli/1.0.0/some-artifact-cli-1.0.0.jar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM