5

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

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

我以前只是在我的脚本中将路径硬编码到手动下载的依赖项。但是,既然 Maven 正在下载和存储我需要的所有 jar,那么从我的脚本中引用它们的最佳方法是什么:

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

5 回答 5

2

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

于 2012-06-12T07:00:22.800 回答
1

重新查看您拥有的所有脚本。潜在地,您可以使用maven exec plugin实现其中一些功能。

除了汇编和阴影插件之外,您可能还想查看maven 依赖插件提供的功能。

于 2012-06-12T13:11:39.413 回答
1

在我的项目(Soluvas fb-tools/fbcli)中,因为我使用 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 "$@"         

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

于 2012-06-20T17:14:02.530 回答
0

有很多插件在做你提到的类似的事情。您提到的组装插件无疑是其中之一(您建议的方式也是一种简洁的工作解决方案)。

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

于 2012-06-12T07:24:00.980 回答
0

exec:java这是@artbristol 在另一条评论中提到的使用 Maven 插件的 CLI 示例:

mvn exec:java -Dexec.mainClass="mypackage.MyClassWithMain" -Dexec.args="arg1 arg2"
于 2022-02-04T10:21:36.333 回答