首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将外部jar作为依赖项添加到maven POM以进行编译,但在创建fat jar时将其排除

在使用Maven构建Java项目时,可以通过将外部的jar文件作为依赖项添加到项目的POM文件中,从而在编译过程中使用这些jar文件。然而,有时候我们可能希望在创建可执行的fat jar文件时排除这些外部依赖,以减小jar文件的大小。下面是一种实现方法:

在项目的POM文件中,通过使用Maven的dependencybuild插件来实现添加外部jar依赖和排除依赖的操作。具体步骤如下:

  1. dependencies节点下添加需要作为依赖项的外部jar,指定相应的groupIdartifactIdversion。例如:
代码语言:txt
复制
<dependencies>
    ...
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>external-jar</artifactId>
        <version>1.0.0</version>
    </dependency>
    ...
</dependencies>
  1. build节点的plugins下添加maven-assembly-plugin插件,用于创建可执行的fat jar文件。例如:
代码语言:txt
复制
<build>
    ...
    <plugins>
        ...
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.example.MainClass</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <excludes>
                    <exclude>com/example/external/**</exclude>
                </excludes>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        ...
    </plugins>
    ...
</build>

在上述配置中,excludes节点中的exclude标签用于排除指定路径下的依赖项。这里示例中排除了com/example/external路径下的所有类。

  1. 运行mvn package命令,Maven将会自动下载所需的依赖项并将它们添加到编译过程中。同时,使用maven-assembly-plugin插件创建一个包含所有依赖项的可执行的fat jar文件。

请注意,上述步骤中的示例配置仅供参考,实际配置根据项目的具体需求可能会有所不同。在实际使用过程中,需要根据实际情况进行相应的调整。

希望这个答案能够帮助到你。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

重构谷粒商城06:Maven快速入门教程

打包会将应用程序及其所有依赖项打包成一个文件,简化了分发和部署过程,确保在不同环境中都能一致运行。还对代码进行混淆和压缩,增加反编译的难度,保护知识产权。...6、在IDEA中使用maven 创建一个maven项目。 如果您出现了使用maven archetype创建项目的没有生成src目录,而且pom文件为空的问题: 请将创建项目时,选择的jdk版本降级。...runtime:表示在编译时不需要,但在运行时需要。最典型的就是jdbc。 test:表示该依赖只在测试时需要。无法在非测试代码中导入,不会被打包到最终的jar包中。比如Junit框架。...9.2 添加依赖 在maven repository网站,找到jar包的坐标,添加到pom文件中,刷新下maven项目就可以了。 9.3 依赖传递 依赖是具有传递性的。...使用场景:当你发现某个传递性依赖可能会引起冲突或者不需要时,可以使用 exclusion 标签排除它。 典型用途:用于排除冲突的依赖项、过时的版本或不需要的传递性依赖。

18110
  • 快速构建第一个Flink工程

    构建工具 Flink项目可以使用不同的构建工具进行构建。为了能够快速入门,Flink 为以下构建工具提供了项目模版: Maven Gradle 这些模版可以帮助你搭建项目结构并创建初始构建文件。...命令执行后,你将 找到一个JAR文件,里面包含了你的应用程序,以及已作为依赖项添加到应用程序的连接器和库:target/-.jar。...注意: 如果你使用其他类而不是 StreamingJob 作为应用程序的主类/入口,我们建议你相应地修改 pom.xml 文件中的 mainClass 配置。...test code dependencies { // -------------------------------------------------------------- // 编译时依赖不应该包含在...命令执行后,你将 找到一个 JAR 文件,里面包含了你的应用程序,以及已作为依赖项添加到应用程序的连接器和库:build/libs/--all.jar。

    1.7K30

    浅谈 java 中构建可执行 jar 包的几种方式

    有时候,由于项目的需要,我们会将源码编译后以工具包(class打成jar包)的形式对外提供,此时, 你的 jar 包不一定要是可执行的,只要能通过编译,能被别人以 import 的方式调用就行了...classpathPrefix:如果您计划在同一目录下包含有您的所有依赖项,作为您将构建的 JAR,那么您可以忽略它;否则使用  classpathPrefix 来指定所有依赖 JAR 文件的前缀。...当您使用这 3 个元素配置好了 MANIFEST.MF 文件之后,下一步是将所有的依赖项复制到 lib 文件夹。...有一个 copy-dependencies,目标是将您的依赖项复制到您所选择的目录。...POM关系: 主要为依赖,继承,合成 REF: 使用maven插件对java工程进行打包 http://chenzhou123520.iteye.com/blog/1706242

    3.9K50

    快速构建第一个Flink工程

    构建工具 Flink项目可以使用不同的构建工具进行构建。为了能够快速入门,Flink 为以下构建工具提供了项目模版: Maven Gradle 这些模版可以帮助你搭建项目结构并创建初始构建文件。...命令执行后,你将 找到一个JAR文件,里面包含了你的应用程序,以及已作为依赖项添加到应用程序的连接器和库:target/-.jar。...注意: 如果你使用其他类而不是 StreamingJob 作为应用程序的主类/入口,我们建议你相应地修改 pom.xml 文件中的 mainClass 配置。...test code dependencies { // -------------------------------------------------------------- // 编译时依赖不应该包含在...命令执行后,你将 找到一个 JAR 文件,里面包含了你的应用程序,以及已作为依赖项添加到应用程序的连接器和库:build/libs/--all.jar。

    1.9K31

    微服务架构之Spring Boot(八)

    我们 需要将 Example.class 作为参数传递给 run 方法,以告诉 SpringApplication 哪个是主要的Spring组件。还会传递 args 数组以公开任何命 令行参数。...11.5创建一个可执行的Jar 我们通过创建一个完全自包含的可执行jar文件来完成我们的示例,我们可以在生产中运行它。...可执行jar(有时称为“fat jar”)是包含已编译类 以及代码需要运行的所有jar依赖项的归档。...uber jar将所有应用程序依赖项中的所有类打包到一个存档中。这种方法的问题在于 很难看出应用程序中有哪些库。如果在多个罐子中使用相同的文件名(但具有不同的内容),也可能会有问题。...要创建可执行jar,我们需要将 spring-boot-maven-plugin 添加到 pom.xml 。

    35020

    Spring Boot 核心编程思想-第一部分-读书笔记「建议收藏」

    xml配置 2、Spring Boot 具有一套固化的视图,该视图用于构建生产级别的应用 我的理解是通过maven 管理 Starter,将Spring Boot平台依赖的第三方类库进行固化,减少管理它们的烦恼...Spring boot 的FAT Jar是一个独立的归档文件,除了包含传统的 Java Jar资源外,还有依赖的JAR文件, 被java -jar 引导时,内部依赖的JAR 文件无法被JDK内建的jar...WarLauncher的实现原理 war 和Jar 差异很小,主要区别在于项目文件和JAR Class Path路径不同,具体可以 修改pom进行打包,然后解压进行对应差异。...总结 :Spring boot 利用 Maven的依赖管理特性,进而固化其Maven依赖,固化的“Starter”依赖,简化构建 特性 ,并非Spring Boot专属,但是Spring 技术栈却将其利用的相当充分...在使用Springboot的时候,当我们将 “starter”添加到应用Class path 时,其关联的特性随应用启动而自动装载,这是Spring boot的亮点, 它的原理是什么呢?

    93110

    maven 项目依赖

    什么是依赖 依赖的作用可以将项目以包的方式引用到当前项目中进行使用。 实际上平时引用的jar包都看可以看成是一个个子项目被引入到了项目中。...项目引用 也就是把其他的项目当成jar包放入仓库中,进行依赖的引用,就跟从网上下载jar包到本地一样。 被项目在被引用前必须先 clean install 到仓库中。...引用示例 创建一个maven项目,在 pom.xml 中添加一个项目引用,这里引用一个外部项目 junit,用它来构建测试用例,这里仅作为项目引用的示例。 依赖范围 doptional:标记依赖是赖可选 exclusions:用来排除传递性依赖 scope 属性: test: 测试的时候需要这个依赖,编译、打包、发布这个依赖都不会被生效。...provided: 编译和测试过程中有效,最后生成war不会加入依赖,如servlet-api tomcat有带,打包时就没必要了,只在测试时添加就可以了。

    25640

    Maven系列第3篇:详解maven解决依赖问题

    以往我们做一个springmvc项目,我们需要添加很多springmvc相关的jar,然后将其复制到项目的lib下面,然后添加到classpath中,期间还有可能出现jar版本冲突、jar包不全的问题,...pom中的配置信息,来加载我们项目中需要依赖的jar包,还有需要如何构件项目等等信息,都可以在pom文件中进行配置。...pom文件 当我们在项目中需要用到maven帮我们解决jar包依赖问题,帮我们解决项目中的编译、测试、打包、部署时,项目中必须要有pom.xml文件,这些都是依靠pom的配置来完成的。...表示项目的运行环境中已经提供了所需要的构件,对于此依赖范围的maven依赖,对于编译源码、编译测试、运行测试中classpath有效,但在运行时无效。...runtime 运行时依赖范围,使用此依赖范围的maven依赖,对于编译测试、运行测试和运行项目的classpath有效,但在编译主代码时无效,比如jdbc驱动实现,运行的时候才需要具体的jdbc驱动实现

    2K30

    Maven

    注意: 目录名字不可以随便改,因为maven进行编译或者jar包生成操作的时候,是根据这个目录结构来找的,你若轻易动,那 么久找不到了。...在pom.xml文件 根元素project下的 dependencies标签中,配置依赖信息,内可以包含多个 dependence元素,以声明多 个依赖。...排除依赖 exclusions: 用来排除传递性依赖 其中可配置多个exclusion标签,每个exclusion标签里面对应的有groupId, artifactId, version三项基本元素。...里的配置文件拷贝到项目中并做打包处理,而非resource目录下的配置文件 在打包时不会添加到项目中。...war项目,必然要部署在服务器上,方式: (1)部署在远程服务器上 (2)将IDEA和外部tomcat产生关联,然后将项目部署在外部tomcat上 现在学习一个新的方式,不再依赖外部的tomcat,maven

    2.9K40

    Maven

    ,如果别人要用我们的项目作为依赖,那么就需要一起下载我们项目的依赖,如Lombok) 我们着重来讲解一下scope属性,它决定了依赖的作用域范围: compile :默认的依赖有效范围,在编译、运行、测试时均有效...:某一个项目需要依赖于存储在本地的某个 jar 包,该 jar 包无法从任何仓库中下载的,这种依赖被称为外部依赖或本地依赖。...JUnit的engine依赖,我们可以在外部库中观察排除依赖之后和之前的效果。...Maven打包项目 我们的项目在编写完成之后,要么作为Jar依赖,供其他模型使用,要么就作为一个可以执行的程序,在控制台运行,我们只需要直接执行package命令就可以直接对项目的代码进行打包,生成jar...打包将无法完成,我们也可以手动跳过,选择执行Maven目标来手动执行Maven命令,输入mvn package -Dmaven.test.skip=true 来以跳过测试的方式进行打包。

    68730

    Maven详解

    provided:已提供依赖范围 对于编译和测试classpath有效,但在运行时无效 典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但运行项目的时候,容器已提供 runtime...:运行时依赖范围 对于测试和运行class-path有效,但在编译主代码时无效 典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行运行项目的时候才需要实现接口的具体...-- 当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom --> pom 创建子工程 如果子工程坐标中的groupId和version与父工程一致...“模块工程”汇集起来,作为一个整体对应完整的项目 好处 一键执行 Maven 命令:很多构建命令都可以在“总工程”中一键执行 Maven 要求有父工程时先安装父工程 有依赖的工程时,先安装被依赖的工程...将包安装至本地仓库,以让其它项目依赖deploy 将最终的包复制到远程的仓库,以让其它开发人员共享;或者部署到服务器上运行 特点 前面三个生命周期彼此是独立的 在任何一个生命周期内部,执行任何一个具体环节的操作

    10510

    Gradle 与 Maven

    您可以在 Gradle 上找到的其他显着性能特征包括: Java 类的增量编译 Java 的编译避免 将 API 用于增量子任务 一个编译器守护进程,它也使编译速度更快 在管理依赖方面,Gradle 和...您只能在 Gradle 上找到的其他依赖项管理功能包括: 兼容库的替换规则的使用 ReplacedBy 规则的使用 更好的元数据分辨率 能够用外部依赖项动态替换项目依赖项,反之亦然 Gradle 还让您在处理复合构建时更加轻松...4 代码示例 在比较 Ant、Gradle 和 Maven 时,Naresh Joshi 比较了在Programming Mitra 中创建编译、执行静态分析、运行单元测试和创建 JAR 文件的构建脚本所需的代码...您可以添加插件(例如 Maven CheckStyle、FindBugs 和 PMD)以将静态分析作为单个目标与单元测试一起执行,但您需要指定海关检查样式配置的路径以确保它在错误时失败,使用如下代码:...使用 Maven,您可以轻松定义项目的元数据和依赖项,但创建高度自定义的构建对于 Maven 用户来说可能是一场噩梦。

    1.8K40

    Java Maven POM配置参考

    optional 当此项目本身是依赖项时,将依赖项标记为可选。例如,假设一个项目A依赖于项目B来编译一部分可能在运行时不使用的代码,那么我们可能不需要所有项目都使用项目B。...此外,Gradle对它的解释不同,导致同一POM的依赖树不同。如果打算将其限制为1.*版本,则更好的版本号要求是[1,1.9999999)。 排除 限制依赖项的可传递依赖项有时很有用。... 这只会从这个依赖项中删除指向maven-core的路径。如果maven-core在POM的其他地方作为直接或传递依赖出现,那么它仍然可以添加到classpath径中。...通配符排除,很容易排除依赖项的所有可传递依赖项。...将这些属性添加到父POM时要小心,因为这可能会影响子POM或子孙POM。 dependencies: 在POM中可以看到很多依赖项,它们是所有plugins元素块下的一个元素。

    57030

    【SpringBoot】什么是Maven,以及如何配置国内源实现自动获取jar包

    但是大白话就是: Maven是⼀个项⽬管理⼯具, 通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包 1.2创建一个Maven项目 那么接下来就跟着小编进行操作吧~~~ 注意:IDEA...具, 通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包 获取的jar包, 其实就是依赖 依赖配置 在之前学习JDBC的时候,我们要添加mysql-connector-java的包.并且添加到项...如上图中, 如果项⽬A不需要Jar B,也可以通过排除依赖的⽅式来实现 此时我们主动使用代码进行依赖的排除: org.springframework...; Maven helper插件 当项⽬⽐较复杂时, 我们就会有Jar包冲突的问题, 这时候就需要去解决依赖冲突....当我们在pom⽂件中配置完依赖之后, 点击刷新, Maven会根据坐标的配置, 去仓库⾥寻找Jar包, 并把他 下载下来, 添加到项⽬中.

    15110

    Java - Maven 项目打包详解

    在 Java 开发中,Maven 是一款非常重要的项目管理工具,它不仅能够帮助我们管理项目的依赖关系,还提供了强大的项目打包功能。本文将详细介绍如何使用 Maven 对 Java 项目进行打包。...通过在项目的根目录下创建一个 pom.xml 文件,我们可以定义项目的各种信息,包括项目的坐标(groupId、artifactId、version)、依赖项、插件等。...clean:是一个 Maven 生命周期阶段,它会清理项目生成的目标目录(通常是 target 目录),删除之前构建过程中生成的文件,如编译后的类文件、打包后的 jar 包等,以确保本次构建是在一个全新的环境下进行...排除依赖 有时候,我们可能不希望某些依赖被打包进最终的 JAR 或 WAR 包中。...六、总结 通过 Maven 的强大打包功能,我们可以方便地将 Java 项目打包成各种类型的文件,以满足不同的部署和使用需求。

    24110

    sbt的依赖管理逻辑

    sbt 使用 Apache Ivy 作为其依赖管理系统,支持 Maven 和 Ivy 依赖格式。本文将对sbt的依赖管理逻辑进行一些个人观点上概述,水平有限,还请见谅。...但是在这之前,你需要创建一个 Maven 项目,然后在 pom.xml 文件中添加 Gson 作为依赖项。 将其添加到你的项目中。...非托管依赖项是指开发人员手动管理和引入项目所需的依赖项,通常是通过将依赖项的 JAR 文件放置在项目的某个目录下,或者直接引用本地文件路径来实现。...其实总的来说,sbt 的依赖项的使用的这个过程涉及读取配置文件、解析依赖项声明、下载依赖项、解决依赖项冲突等步骤,而这些步骤的唯一目的以确保项目能够正确地获取和管理其所需的外部依赖项。

    17910

    Fat JAR

    Fat JAR(也称为uber-JAR)是一个包含了其所有依赖项的可执行Java归档文件(JAR),这意味着它不仅仅包含了你自己编写的类和资源文件,还包括了所有你的应用程序运行时所需的第三方库。...要创建一个Fat JAR,你可以使用构建工具如Maven或Gradle,它们都提供了打包所有依赖项到一个JAR中的插件。...以下是一个使用Maven的简单Fat JAR入门案例: 创建一个新的Maven项目你可以手动创建一个新的Maven项目,或者使用IDE来生成,项目结构通常如下所示: my-fatjar-app ├──...编辑 pom.xml 文件在 pom.xml 文件中,你需要添加 maven-assembly-plugin 插件配置,它会指导Maven如何打包你的应用程序和它的依赖项到一个Fat JAR中。...以上就是一个简单的Fat JAR入门案例。如果你使用的是Gradle,步骤将有所不同,但基本概念是相同的:你需要配置你的构建脚本以包含所有依赖,并创建一个可执行的JAR文件。

    41610

    走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven

    这三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jar、pom或者jar都是以基于这些基本的坐标进行区分的。...典型的例子是Jnuit,它只有在编译测试代码及运行测试的时候才需要。 provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时候无效。...使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。...Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。...在解决依赖冲突方面Gradle的实现机制更加明确,两者都采用的是传递性依赖,而如果多个依赖项指向同一个依赖项的不同版本时可能会引起依赖冲突,Maven处理起来较为繁琐,而Gradle先天具有比较明确的策略

    1.2K20

    走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven

    这三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jar、pom或者jar都是以基于这些基本的坐标进行区分的。...典型的例子是Jnuit,它只有在编译测试代码及运行测试的时候才需要。 provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时候无效。...使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。...Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。...在解决依赖冲突方面Gradle的实现机制更加明确,两者都采用的是传递性依赖,而如果多个依赖项指向同一个依赖项的不同版本时可能会引起依赖冲突,Maven处理起来较为繁琐,而Gradle先天具有比较明确的策略

    1.1K00
    领券