Maven 2 maven jar插件和可传递依赖项

Maven 2 maven jar插件和可传递依赖项,maven-2,assemblies,jar,classpath,maven-plugin,Maven 2,Assemblies,Jar,Classpath,Maven Plugin,我使用汇编和jar插件来部署我的应用程序。我还使用jar插件来帮助我使用 <addClasspath>true</addClasspath> true 虽然这似乎是可行的,但当我尝试执行jar(它指定了一个适当的主类)时,问题就出现了——它将无法找到一个实际上是可传递依赖项的库。因此,我的项目A依赖于项目B,项目B依赖于jar C。程序集插件将正确地压缩A、B和C,但jar插件没有在清单中包含C,导致ClassNotFoundException 我在maven jar

我使用汇编和jar插件来部署我的应用程序。我还使用jar插件来帮助我使用

<addClasspath>true</addClasspath>
true
虽然这似乎是可行的,但当我尝试执行jar(它指定了一个适当的主类)时,问题就出现了——它将无法找到一个实际上是可传递依赖项的库。因此,我的项目A依赖于项目B,项目B依赖于jar C。程序集插件将正确地压缩A、B和C,但jar插件没有在清单中包含C,导致ClassNotFoundException

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


我这样做对吗?还有人设法将可传递依赖项生成到清单中吗?也许我做错了什么,或者是不正常。感谢您的帮助。

我试图解决上述问题。在我的例子中,它起作用了(maven jar插件v2.2)。 我有一个名为jarloading的父项目,它有3个孩子:

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

打完电话

mvn package
使用包含

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/
更改为目录

cd ~/Desktop/jarloading-bin
跑步

java -jar main-0.0.1-SNAPSHOT.jar
它工作得很好


但实际上问题是,类路径如何列在清单文件中:

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:

...
<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>
...
。。。

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

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

打完电话

mvn package
使用包含

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/
更改为目录

cd ~/Desktop/jarloading-bin
跑步

java -jar main-0.0.1-SNAPSHOT.jar
它工作得很好


但实际上问题是,类路径如何列在清单文件中:

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:

...
<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>
...
。。。

我通过。。。实际上并没有解决它。我仔细检查了一下,仍然不知道为什么一些可传递的依赖项没有被提取出来——似乎跳过了其中的一个,它们最终没有被生成到清单中


我仔细研究了一下maven依赖插件。令人惊讶的是,配置
true
并将其绑定到
assembly:assembly
阶段解决了类路径问题。。。实际上并没有解决它。我仔细检查了一下,仍然不知道为什么一些可传递的依赖项没有被提取出来——似乎跳过了其中的一个,它们最终没有被生成到清单中


我仔细研究了一下maven依赖插件。令人惊讶的是,配置
true
并将其绑定到
assembly:assembly
阶段解决了类路径问题。

我无法让maven jar插件工作,我不得不使用maven assembly插件

示例:

  • (这就是我所遵循的)

    • 我无法让maven jar插件工作,我不得不使用maven汇编插件

      示例:

      • (这就是我所遵循的)

      对于找到此答案的任何其他人,我相信它不会添加标记为可选(如果未找到)或标记为提供范围的依赖项。对于找到此答案的任何其他人,我相信它不会添加标记为可选(如果未找到)或标记为提供范围的依赖项。