0

问题是我想使用位于我的项目依赖项之一的WEB-INF/lib内的*.jar文件,这些依赖项被打包为 war。我想在编译时使用这些文件。是否可以?

基本上它看起来或多/少是这样的:

我的项目pom.xml

<dependencies>
        ................
        <dependency>
            <groupId>a.b.c</groupId>
            <artifactId>service</artifactId>
            <version>1.0.0</version>
            <type>war</type>
            <scope>provided</scope>
        </dependency>
        ...............
</dependencies>

service.war结构:

|
--WEB-INF
     |
     ---lib
         |
         ---lib1.jar   <-  I need this file on compile time for **MyProject**
4

5 回答 5

0

是的,这些 JAR 文件是正确编码的 Java JAR/库文件。您可以在其他几个项目中复制和使用这些 JAR 文件。您可以使用一些提取器工具来浏览或将 WAR 内容提取到本地目录。

于 2012-07-13T13:37:51.093 回答
0

如果您使用的是 Eclipse,则需要将这些 jar 文件添加到应用程序的 BuildPath 中。在您的项目上单击右键,选择 BuildPath,然后选择“Configure Build Path”。在此之后,选择“库”,然后单击“添加外部罐子”。选择你的 jar 文件,就是这样。如果您使用的是 Netbeans 或其他 IDE,则必须执行类似的操作。

于 2012-07-13T13:42:12.843 回答
0

您可以使用maven-dependency-plugin将依赖项 war 文件复制到具有 unpack 选项的文件夹中,并在生命周期的早期阶段从该文件夹中复制一个文件。如果您想在编译期间使用提取的 jar,我不确定您是否可以通过 maven 处理它,因为依赖关系会更早解决?但我不确定。您可以使用位于目标文件夹中的系统范围依赖项。

于 2012-07-13T14:14:31.087 回答
0

您可以定义一个<dependency/>具有“已提供”范围的 lib1。如果您将 lib1 用作 Maven 工件,我实际上会强烈推荐这个。

使用 maven 依赖插件解压战争也是可能的,但我不会真的推荐这作为你的情况的补救措施,因为你需要将 lib1 依赖定义为系统类型,我不相信这对你有用, 因为依赖关系解析发生在 POM 文件的插值之后,这为时过早,依赖插件对你几乎没有任何作用。

于 2012-07-13T14:40:50.470 回答
0

我能想到的唯一解决方案如下:

  • 创建一个在主模块之前构建的模块,并声明 WAR 依赖项。
  • 正如其他人所说,使用maven-dependency-plugin's(unpack-dependencies目标)将 WAR 扩展到临时位置。
  • 使用maven-install-plugin(install-file目标) 将 JAR 安装到本地存储库。此时,您将为它们分配任意groupIdartifactId

这将负责设置依赖项。由于您现在已经分配了groupIdartifactId,您可以将它们用作任何其他依赖项。

这应该可行,这是我能想到的唯一方法来做你所描述的事情。

于 2013-04-10T02:50:53.120 回答