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

时间:2012-06-12 02:36:31

标签: bash maven classpath

是的,我的论文已经完成了!现在压力已经消失了,我已经完成了玩Skyrim的工作,我正在将我为论文编写的代码从一个用ant构建的混乱目录转换为一个漂亮的maven项目。

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

我以前只是将脚本中的硬编码路径转换为手动下载的依赖项。但是,现在maven正在下载并存储我需要的所有罐子,从我的脚本中引用它们的最佳方法是什么:

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

重新学习你拥有的所有脚本。您可以使用maven exec plugin来实现其中一些功能。

除了程序集和阴影插件外,您可能还想查看maven dependency plugin提供的功能。

答案 2 :(得分:1)

在我的项目( Soluvas fb-tools/fbcli )中,因为我使用的是Java 6及更高版本(支持wildcard classpaths),所以这就是我的工作:

#!/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 "$@"         

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

答案 3 :(得分:0)

有很多插件做你提到的类似的事情。您提到的程序集插件无疑是其中之一(并且您建议的方式也是一个简洁的工作解决方案)。

您可能需要查看AppAssemblerShade。它们都提供了一些捆绑依赖关系并生成直接可执行包的机制。