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

IDEA打包maven项目同时带上依赖

我们在使用IDEA中maven的LifeCycle去打包时,打出的jar包只包含代码,在使用时会出现“找不到包或者无法加载“ClassNotFoundException”报错。...这是因为我们的jar包没有maven项目中的其他依赖包,所以我们可以在打包时把依赖也打入到jar包中,步骤如下: 1、选中项目,点击File,选择打开“Project Structure” 2、然后选择左边的...“Main Class”,一定要选择“extract to the target JAR”(如果选择copy to the output directory and link via manifest打包的话可能出现找不到主类的情况...,选择源文件生成的路径,都设置好后点击“ok” 4、再设置打包的名称,打包的类型,打包生成的路径,然后添加“Library Files”,将需要的maven依赖包选中,点击ok,ok即可 5、...设置完成后,点击菜单栏的build=》Build Artifacts,然后选择弹出菜单的“Build” 6、然后即可在项目输出目录中查找到打包好的jar包!

2.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

Maven 依赖树的解析规则

对于 Java 开发工程师来说,Maven依赖管理代码构建的标准。遵循「约定大于配置」理念。Maven 是 Java 开发工程师日常使用的工具,本篇文章简要介绍一下 Maven依赖解析。...依赖树结构 在 pom.xml 的 dependencies 中声明依赖包后,Maven 将直接引入依赖,并通过解析直接依赖的 pom.xml 将传递性依赖导入到当前项目,最终形成一个树状的依赖结构。...比如下图 A 通过 B D 引入了 1.0 版本的 E,同时 A 通过 C 引入了 2.0 版本的 E。...依赖循环 比如:A 依赖了 B,同时 B 又依赖了 A。这种循环依赖可能不会直接显现,但是可能会在一个很长的调用关系显现出来,也可能是模块架构的设计不合理。...依赖排除 我们可以使用 exclusion 来解决依赖冲突,但是 exclusion 会降低 Maven 依赖解析的效率,因为对应的 pom 文件不能缓存,每次都要重新遍历子树。

2.9K40

Maven 依赖调解源码解析(二):如何调试 Maven 源码插件源码

有了源码包 Demo 项目,我们就能够着手分析了。那么问题来了,我们对 Maven 源码并不熟悉,总不能一头扎进去看。那么,我们就用调试的方式分析吧,简单且精准。...那么问题来了,mvn 源码插件源码如何调试呢?这里提供一个非常简单的方法:使用 mvnDebug 命令辅助调试。...注 1:本文以 Maven 核心源码为例介绍了调试流程,其实 Maven 插件的源码调试方法也是一模一样的。...注 2:这种调试的方法很灵活,我们可以随便选择不同的业务项目,与 Maven 源码进行联调。当然也有很多调试 Maven 源码的方法,但要设置一大堆东西。...搞清楚如何调试 Maven 插件源码后,我们就可以开始正式分析了。

80931

Maven 依赖调解源码解析(一):开篇

前言 相信久经沙场的 Java 开发同学们,一定对 Maven 这个工具不陌生。Maven依赖调解原则,便是经常聊到的话题。...它是为了解决 groupId artifactId 完全相同的依赖,应该取哪个版本号的问题。 下面列举出一些原则: 原则一:传递依赖,路径最近者优先。...dependency:tree 是 Maven 的核心依赖插件,它在依赖解析时发挥重要作用,平时我们也经常使用命令 mvn dependency:tree 输出目录树进行查看。...这个插件由两部分组成,分别是 maven-dependency-plugin maven-dependency-tree;前者包含了与「依赖」相关的多种插件,其中就包括 tree 插件;后者则是 tree...为了进行实验,我们需要搭建一个 Demo 项目,并用 Maven 管理依赖包。该项目名称为 mavenDependencyDemo,我们在其中创建五个模块 A、B、C、D、X。

47221

Dubbo调用maven依赖

参考: 1. dubbo调用maven依赖的区别 2. maven依赖dubbo服务暴露调用区别? dubbo:跨系统通信。...maven依赖:在一个多module的maven项目中,maven子模块间提供依赖实现调用。...比如,模块A调用模块B,将模块B打包成jar,引入到模块A中(相当于模块A拥有了模块B),实则模块A模块B是在同一项目中运行。...---- 一般dubbo会有服务提供端和服务调用端,服务提供端会提供接口interface接口的实现类class,而常见的开发方法都是接口实现类在不同的项目里面,接口所在的项目一般打包成jar形式,...它需要使用Maven安装到本地仓库中,实现类打包得看情况,如果是Spring MVC的项目,一般打包成war形式,如果是Spring Boot项目,一般打包成jar形式,我们在调用端调用的时候,只需要引入接口打包好的

1.3K40

Maven构建和依赖管理解析

依赖管理在之前的传统 WEB 项目中,所依赖的 JAR 包都要复制到工程中,这就导致了工程比较大。...这其中会涉及到一个问题—性能,不过不用担心, Maven 中通过建立索引,就解决了这问题,这使得我们在加载 JAR 包时从工程中加载的速度是一样的。...package 命令:从 pom 文件中获取打包类型,然后将打出来的 JAR 输出到对应目录install 命令:将打包完放在 target 目录下的 JAR 包部署到本地仓库POMpom.xm元素解析...这个元素的值是区分一个项目的关键信息之一,它的值通常是由该项目的组织的域名的反写产生的(Java的包名的机制一样)。...packaging 这个元素指定了该artifact打包的类型(比如:jar、war、ear等)。

13600

说说maven依赖冲突,依赖调解,依赖传递依赖范围

更加准确的说法是,maven解析直接依赖的POM,将那些必要的间接依赖,以传递依赖的形式引入到当前项目中。 为什么说是’必要的间接依赖‘呢?这是因为不是所有的间接依赖都会被引入的。...例子:junit provided: 已提供依赖范围。对编译测试classpath有效。例子:servlet-api runtime: 运行时依赖范围。对测试运行classpath有效。...结论是:第一直接依赖的范围第二直接依赖的范围决定了传递性依赖的范围。...比如slf4j-log4jlogback这两个依赖是不能同时出现的,但是因为他们的坐标不一样,所以maven不会对齐进行处理。这个时候我们就需要手动进行 排除依赖 了。...对于重复冲突的依赖,会提示omitted for duplicateomitted for conflict with x.x.x。 第二个方法是使用maven的enforcer插件。

1.2K30

Maven - 依赖范围传递性依赖

之所以会有依赖范围,是因为Maven在编译、测试运行项目时会各自使用一套classpath,依赖范围就是用来控制这三种classpath的。...使用此依赖范围的Maven依赖,对于编译测试classpath有效,但在运行时无效。...使用此依赖范围的Maven依赖,对于测试运行classpath有效,但在编译时无效。...由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用,systemPath元素可以引用环境变量。...Maven的传递性依赖 什么是传递性依赖 有时候我们在pom.xml文件中引入的依赖,其本身就需要依赖于其他的依赖,这时候我们不需要去考虑这些依赖Maven解析各个直接依赖的pom,将那些必要的间接依赖

1K10

Maven 依赖调解源码解析(三):传递依赖,路径最近者优先

场景 A有这样的依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X是A的传递性依赖,但是两条依赖路径上有两个版本的X,那么哪个X会被Maven解析使用呢?...这个方法中,以访问者方式序列化依赖关系,这里面用到的visitor 是 BuildingDependencyNodeVisitor ,可以回到 maven-dependency-tree 项目查看调用链加以印证...而且这个赋值关系受到 resolved previous 的相等关系控制。那我们分别看看 previous、 resolved 以及 node 的来源。...往上翻,可以看到 previous 也即X(1.0) node 也即 X(2.0)均是在上一步解析得到的: 而 resolved 是在这里解析得到的: 结合前面的分析,我们就可以知道: 如果 resolved...小结 至此,我们已经知道了路径最近者优先原则的运行原理:依赖解析是一种深度遍历的过程,每当解析一个依赖后,均会将其放到 resolvedArtifacts 这个Map中,后续再看到同名的依赖时,进行冲突调解

52330

NET Framework 版本依赖关系

例如,.NET Framework 4、4.5 更高版本包含 CLR 4,而 .NET Framework 2.0、3.0 3.5 包含 CLR 2.0。 (没有版本 3 的 CLR。)...- 对 TLS 1.1 TLS 1.2 协议的 ClickOnce 支持。- 支持将 Windows 窗体 WPF 应用转换为 UWP 应用。...Visual Studio .NET - - 请参阅说明 通常,你不应卸载计算机上安装的 .NET Framework 的任何版本,因为你使用的应用程序可能依赖于特定版本,如果你移除该版本,则应用程序可能会中断...无法在计算机上并行运行版本 2.0、3.0 3.5。 在安装 3.5 版时,你将自动获得 2.0 3.0 层,并且为版本 2.0、3.0 3.5 生成的应用程序均可在 3.5 版上运行。 ...有关详细信息,请参阅程序集并行执行。

2.1K00

Maven 依赖调解源码解析(六):dependencyManagement 版本锁定

可以看到,解析 C 依赖的 X(1.0)时,被“manage”了,也即:版本被改成了 2.0。 很明显,版本号是以 managedVersions 为准的。...是从 session 中获取到的: 到此,我们发现一种包含关系:session -> currentProject -> managedVersionMap。...赋值的地方比较多,在不熟悉源码的情况下,我们把所有 setCurrentProject setManagedVersionMap 的地方都打上断点,看看哪里进行了赋值。...最终我们找到了这里: 至此,我们找到了「解析 dependencyManagement 中定义的依赖版本」的源码。...小结 依赖解析过程中,会解析 dependencyManagement 定义的依赖版本,如果解析到了,会以 dependencyManagement 重定义的依赖版本为准,也就是我们常提到的版本锁定。

71830
领券