bash脚本应该如何确定maven项目及其依赖项的类路径?

bash脚本应该如何确定maven项目及其依赖项的类路径?,bash,maven,classpath,Bash,Maven,Classpath,耶,我的论文写完了!现在压力已经消除,我已经玩够了Skyrim,我正在将我为论文编写的代码从一个用ant构建的混乱目录转换成一个不错的maven项目 我最初有一个bin目录,其中包含大约20个bash脚本,这些脚本运行我论文中使用的各种java和ruby程序,包括最终的基于jruby/sinatra的web服务器。我计划将脚本移动到src/main/scripts,但我需要弄清楚如何处理类路径 我以前只是在脚本中对手动下载的依赖项的路径进行了硬编码。但是,既然maven正在下载并存储我需要的所有

耶,我的论文写完了!现在压力已经消除,我已经玩够了Skyrim,我正在将我为论文编写的代码从一个用ant构建的混乱目录转换成一个不错的maven项目

我最初有一个
bin
目录,其中包含大约20个bash脚本,这些脚本运行我论文中使用的各种java和ruby程序,包括最终的基于jruby/sinatra的web服务器。我计划将脚本移动到
src/main/scripts
,但我需要弄清楚如何处理类路径

我以前只是在脚本中对手动下载的依赖项的路径进行了硬编码。但是,既然maven正在下载并存储我需要的所有JAR,那么从我的脚本中引用它们的最佳方式是什么:

  • 我应该像以前一样让脚本引用本地存储库中各种jar的完整路径吗
  • 我是否应该将本地存储库目录作为脚本的配置选项,并使用此目录的相对路径
  • 我是否应该使用构建一个包含所有依赖项的大型毛发jar,并通过脚本相对路径
    。/../../../target/*-jar with dependencients.jar
  • 有没有更好的选择我没想到

在脚本中,使用
exec:java
插件运行java类。它将根据定义的依赖项对类路径进行排序。那么你就不必担心了。

有很多插件做着与你提到的类似的事情。你提到的汇编插件无疑是其中之一(你所建议的方法也是一个很好的解决方案)


你可能想进去看看。它们都提供了一些机制来捆绑依赖项并生成一个直接可执行的包。

重新查看您拥有的所有脚本。可能您可以使用实现其中一些功能

除了汇编和着色插件外,您可能还想看看提供的功能。

在我的项目()中,因为我使用Java 6和更高版本(支持),我的工作如下:

#!/bin/bash                                                                                
# Must run first: mvn package dependency:copy-dependencies                                 
java -cp 'target/dependency/*:target/fbcli-1.0.0-SNAPSHOT.jar' org.jboss.weld.environment.se.StartMain "$@"         

无需手动生成类路径。:)

汇编插件有多种选择:大型可执行jar运行良好,但如果要运行多个共享一个公共类路径的Java程序,它的空间效率就不是很高。在这种情况下,您可能更喜欢创建一个包含带有jar文件的lib dir和带有.sh文件的bin dir的zip。我提到的应用程序汇编程序实际上解决了创建.sh或.bat-1的问题。Maven exec插件要求Maven运行。如果要部署并轻松运行项目,则不应将Maven作为需求(因此需要生成shell脚本)。