Maven依赖问题

时间:2009-10-07 02:47:51

标签: java maven-2 jar

所以我终于下潜并安装了maven2,但我遇到了一些问题。

我的代码依赖于我使用install:install-file安装的一些第三方jar。然后我将这些罐子列为我的pom中的依赖项。 Maven可以编译和打包它都很好和花花公子。但是,当我像这样运行我的罐子时:

java -cp“target / *”com.blah.App

它不起作用,因为它找不到运行时需要的某些类。 这些类位于已安装并用于编译的jar中。

我已将该jar的依赖范围列为“已提供”。我也试过使用“系统”,但这也不起作用。我做错了什么?

如果我这样做,我可以让它运行:

java -cp“target / *:path / to / jar1:path / to / jar2”com.blah.App

但必须有一些方法让maven将所需的jar放在目标目录中。

2 个答案:

答案 0 :(得分:3)

您不应该将“提供”用于正常依赖项。 “provided”用于假定在运行时可用的依赖项,例如J2EE应用程序的J2EE API。

您的应用程序不起作用的原因是现在您的依赖项位于maven仓库中,并且需要将它们添加到类路径中。

对于像您这样的普通Java应用程序,您可以使用maven-dependency-plugin将依赖项复制到目录(来自maven存储库)并配置maven-jar-plugin以将jar文件添加到清单中classpath(通过创建可执行jar)。

更新: 您可能还想搜索maven中央存储库以查看您的依赖项是否已存在,因此您不必将其手动安装到本地存储库中。他们很可能已经在那里(如果他们是开源的)。

答案 1 :(得分:2)

要详细了解maven处理依赖关系的方式,Introduction to the Dependency MechanismDependency Scope部分是一个很好的起点。在这里,正如另一个答案中所指出的,对依赖项使用“提供的”范围是不合适的。您应该使用默认的“compile”范围,如果未指定则使用。

然后,要在当前虚拟机中运行com.blah.App,并将封闭项目的依赖关系作为类路径,有maven-exec-plugin

mvn exec:java -Dexec.mainClass="com.blah.App"

正如您所看到的,当您正确使用maven并以maven方式使用时,maven可以让事情变得非常简单。