Java 将EAR中的所有依赖项移动到Maven中的子文件夹
我目前正在Maven中构建一个EAR文件。当我构建它时,我会在目标文件夹中获得以下内容:Java 将EAR中的所有依赖项移动到Maven中的子文件夹,java,maven,ear,Java,Maven,Ear,我目前正在Maven中构建一个EAR文件。当我构建它时,我会在目标文件夹中获得以下内容: -target/ -MyProject.ear -MyProject/ -MainProject.jar -Dependency.jar 如果我在7Zip中打开MyProject.ear,我会看到与MyProject/ 我被要求更改此项,以便所有依赖项都位于子文件夹中,如下所示: -target/ -MyProject.ear -MyProj
-target/
-MyProject.ear
-MyProject/
-MainProject.jar
-Dependency.jar
如果我在7Zip中打开MyProject.ear
,我会看到与MyProject/
我被要求更改此项,以便所有依赖项都位于子文件夹中,如下所示:
-target/
-MyProject.ear
-MyProject/
-MainProject.jar
-lib/
-Dependency.jar
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.9</version>
<!-- All dependencies not otherwise specified are going in /lib -->
<defaultLibBundleDir>/lib</defaultLibBundleDir>
<modules>
<jarModule>
<!-- An exception to keep the main project in the root -->
<groupId>MainProject</groupId>
<artifactId>MainProject</artifactId>
<bundleDir>/</bundleDir>
</jarModule>
</modules>
</configuration>
</plugin>
</plugins>
现在,通过对pom.xml文件进行以下更改,我可以为one依赖项实现这一点:
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.9</version>
<configuration>
<modules>
<jarModule>
<groupId>Dependency</groupId>
<artifactId>Dependency</artifactId>
<bundleDir>lib</bundleDir>
</jarModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
我希望上面的代码能够获取所有工件并将它们放入lib文件夹中。不幸的是,这在Maven 3.2.1中似乎不起作用,提供了一个错误,指出Artifact[jar::::::]不是项目的依赖项
那么,在Maven中构建EAR时,如何将所有依赖项移动到子文件夹中呢?您应该将捆绑目录限制移动到Maven EAR插件的构建配置下,如下所示:
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>${maven-ear-plugin.version}</version>
<configuration>
<modules>
<jarModule>
<groupId>${group_id}</groupId>
<artifactId>${artifact_id}</artifactId>
<bundleDir>lib</bundleDir>
</jarModule>
<webModule>
...
</webModule>
</modules>
<defaultLibBundleDir>/lib</defaultLibBundleDir>
</configuration>
</plugin>
</plugins>
${project.artifactId}
org.apache.maven.plugins
maven耳朵插件
${maven ear plugin.version}
${group_id}
${artifact_id}
解放党
...
/解放党
希望能有所帮助。由于一次测试后未能完全清理pom文件的愉快事故,我发现了如何做到这一点 在
标记中,添加/lib
。默认情况下,这将把所有模块放在目录根目录下的lib
文件夹中。不需要通配符;事实上,Maven在这一部分中不支持通配符,可能是因为没有明确的界限(可以解释为“移动所有工件”)。通配符只适用于排除,因为有明确的界限;它是一组明确定义的工件的子集
如果您想创建一个异常,那么可以指定模块并键入/
,这将把它放回根目录中。完整的XML如下所示:
-target/
-MyProject.ear
-MyProject/
-MainProject.jar
-lib/
-Dependency.jar
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.9</version>
<!-- All dependencies not otherwise specified are going in /lib -->
<defaultLibBundleDir>/lib</defaultLibBundleDir>
<modules>
<jarModule>
<!-- An exception to keep the main project in the root -->
<groupId>MainProject</groupId>
<artifactId>MainProject</artifactId>
<bundleDir>/</bundleDir>
</jarModule>
</modules>
</configuration>
</plugin>
</plugins>
这不管用。我准确地复制了它(并将版本更改为硬编码版本,因为我没有该属性),但仍然得到错误
工件[jar:::::]不是项目的依赖项
您是否将jar模块声明为企业项目的依赖项?是的,我已将它们声明为依赖项。如果我尝试制作一个EAR而不尝试将它们移动到lib文件夹中,那么所有内容都会生成。当我运行mvn包时,没有错误或缺少依赖项或任何东西。事实上,我不认为我在最初的问题中展示的结果会发生,如果它们不是依赖性的话。所以我的答案中已经提到了这个技巧不?也许您可以接受它,因为它有助于找到解决方案,thx。@t您的答案包含
标记,这是正确解决方案的必要组成部分,但通配符不正确,最终解决方案不起作用。因为它不是一个有效的解决方案,所以我会接受它,因为它对我和其他人都有效。对不起,通配符是用来替换你的jar组和工件ID的,不能按原样放置。。。我的诀窍是在maven-ear插件配置下添加
。请更新我的答案,因为它有助于解决您的问题,谢谢。