首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >maven-jar-plugin和传递依赖

maven-jar-plugin和传递依赖
EN

Stack Overflow用户
提问于 2009-07-06 08:46:41
回答 3查看 7.2K关注 0票数 1

我同时使用程序集和jar插件来部署我的应用程序。我还使用jar插件帮助我在清单文件中生成类路径

代码语言:javascript
复制
<addClasspath>true</addClasspath>

虽然这看起来很有效,但当我尝试执行jar (它指定了一个适当的主类)时,问题就来了-它将无法定位实际上是可传递依赖的库。因此,我的项目A依赖于项目B,项目B依赖于jar C。程序集插件将正确地压缩A、B和C,但是jar插件没有在清单中包含C,从而导致了ClassNotFoundException。

我在maven-jar-plugin中没有看到任何可以让我指定需要传递依赖的选项。

我做得对吗?还有谁设法将生成的传递依赖项添加到清单中?也许我做错了什么或做错了什么。感谢您的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-06 13:00:29

我设法解决了通过...而不是真正的解决它。我仔细检查了一下,仍然不知道为什么一些传递依赖没有被拾取-它似乎跳过了它们,它们最终没有生成到清单中。

我仔细研究了一下,使用了maven-dependency plugin。令人惊讶的是,配置<attach>true</attach>并将其绑定到assembly:assembly阶段解决了类路径问题。

票数 0
EN

Stack Overflow用户

发布于 2009-07-06 11:08:06

我试着解决了上面提到的问题。在我的例子中,它起作用了(maven-jar-plugin v2.2)。我有一个名为jarloading的父项目,它有3个childs:

  • main:依赖于a
  • a:依赖于b
  • b:依赖于

调用后

代码语言:javascript
复制
mvn package

使用包含以下内容的部署脚本发布它

代码语言:javascript
复制
rm -r ~/Desktop/jarloading-bin
mkdir ~/Desktop/jarloading-bin
cp a/target/a-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
cp b/target/b-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
cp main/target/main-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/

更改到目录

代码语言:javascript
复制
cd ~/Desktop/jarloading-bin

和运行

代码语言:javascript
复制
java -jar main-0.0.1-SNAPSHOT.jar

它工作得很好。

但实际上重点是,类路径是如何在清单文件中列出的:

代码语言:javascript
复制
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: rschmid
Build-Jdk: 1.6.0_07
Main-Class: Main
Class-Path: a-0.0.1-SNAPSHOT.jar b-0.0.1-SNAPSHOT.jar

主项目的pom.xml:

代码语言:javascript
复制
...
<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <index>true</index>
                    <manifest>
                        <mainClass>Main</mainClass>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>ch.fiftynine.lab</groupId>
        <artifactId>a</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>
...

项目的pom.xml:

代码语言:javascript
复制
...
<dependencies>
    <dependency>
        <groupId>ch.fiftynine.lab</groupId>
        <artifactId>b</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>
...

B项目的pom.xml并不包含什么特别的东西。

以及附带的源代码和二进制文件:source code binaries

票数 7
EN

Stack Overflow用户

发布于 2009-08-13 19:53:09

我不能让maven-jar-plugin工作,我必须使用maven-assembly-plugin。

示例:

  • Brian Fox's Blog (这就是我followed)
  • Maven Assembly Plugin Usage Guide
  • similar example by Scott Leberknight

的那个

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1086051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档