我需要构建一个带有依赖项的发行版jar,其中包含一个依赖项jar,由于某些原因,该jar不能放入Maven.m2/repository。在我的POM文件中我有:
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.abc.ets</groupId>
<artifactId>mylib</artifactId>
<version>3.0.0_258779</version>
<scope>system</scope>
<systemPath>${basedir}/lib/mylib_3.0.0_258779.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.abc.myapp.service.MainService</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
构建成功,但结果myapp-1.0.0-jar-with-dependencies.jar不包含该库中的类,因此抛出ClassNotFoundException。我试图创建Assembly.xml文件来手动管理这个jar文件,但是插件文档相当粗略而且令人困惑。下面是我放入assembly.xml的内容
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<!-- TODO: a jarjar format would be better -->
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
<includes>
<include>${basedir}/lib/mylib_3.0.0_258779.jar</include>
</includes>
</dependencySet>
</dependencySets>
</assembly>
当我运行构建时,我会得到
读取程序集描述符:src/assembly/assembly.xml程序集id jar-with-dependencies被多次使用。以下模式从未在此工件包含筛选器中触发:o'./lib/mylib_3.0.0_258779.jar'
结果是一样的。不包括此jar中的类。
如果有人做过类似的事情,我会很感激一些指示。
应该在运行时提供具有system
作用域的依赖项。引用Maven文档:
与作用域系统的依赖关系总是可用的,并且不会在存储库中查找。它们通常用于告诉Maven JDK或VM提供的依赖关系。因此,系统依赖关系对于解决对工件的依赖关系特别有用,这些工件现在由JDK提供,但在前面的单独下载中可用。
因此,maven-assembly-plugin
将不包括这些依赖项(因为预期提供了这些依赖项)。注意,如果您切换到maven-shade-plugin
时,这个结果将完全相同。
解决问题的唯一方法是不要使用system
作用域(您一开始就不应该使用它)。相反,将这个库安装到您的Maven repo中,然后在POM中声明它,就像您对任何正常依赖项所做的那样(更多信息请参见此答案)。
我使用maven和maven-jar-plugin和maven-assembly-plugin构建了项目的zip,包括项目jar及其依赖项。
问题内容: 我已将JAR复制到中。 我用日食。如果我将罐子一个一个地添加到“项目”->“ Java构建路径”->“添加罐子”中,那么我会执行“项目”->“ Maven”->“更新项目配置”,它们将被Maven删除。并且Eclipse显示错误,其中包含“无法解析xxx”。 注意:我不想创建自己的Maven存储库。它只会使用一次。 我应该如何进行? 问题答案: 在公共Maven存储库中找不到所有库,例
Maven 的 Assembly 插件用来将项目中的依赖、模块和网站稳定等其他资源打包到一个单独的分发文件。
我有一个结构如下的maven项目: 我希望maven jar插件在构建jar文件时打包到数据库文件夹中。我尝试过包含这里概述的内容:https://maven.apache.org/plugins/maven-jar-plugin/examples/include-exclude.html,但它找不到目录“../database”(或../../database或../../../database
我有一个多模块的项目,即。 在一个开发周期中,我向Module1添加了一个类。module2中的类依赖于它。 我的本地中没有这些工件。运行此: 然而,这至少从两个方面提出了一个问题: 我必须经历较慢的安装阶段,而不是较快的编译阶段 我有同一个项目的两个版本,在这些版本中有冲突的修改。我不能用它们各自的修改运行相同的Java类,只能运行当前安装的修改,考虑到它们都是相同的快照版本 这两种方法都有解决
那么,我该如何配置呢?