maven打war包后无法依赖本地工程的jar包,造成debug时跳到class文件而不是本地java文件
问题现象:项目结构如下
growup-service
| - - - - - -growup-api
| - - - - - -growup-core
| - - - - - -growup-war
通过maven打包后出现growup-core依赖本地工程growup-api,growup-war也依赖了本地工程growup-api,但growup-war依赖的是本地仓库里的growup-core,而不是本地工程的growup-core。这时war包引用的是本地仓库里打好core的jar包,因此调试war包引用到core的class文件了。
问题解决与定位:这里其实应该是两个问题,第一个问题是为什么依赖会出问题,依赖不了本地core子项目,第二个问题是怎么解决调试war包时调到core包的java文件而不是编译后的class文件。第二个问题是表象,我们可以通过添加源码解决,这个办法也适用于debug开源代码。日常的项目中,我们会导入一些依赖的开源jar包或者其他项目jar包,但并不会把整个项目导入到eclipse中来,因为我们只要引用而无需修改。但是调试的话会跳到被引用jar包里的class文件,要么是调试显示不了代码,要么显示的是class文件,格式怪异。为了解决这两个显示问题,只需要把源码导入到依赖路径中即可。如上面的问题,我只需要右击war包的项目 -> 点击Build Path -> Configure Build Path -> Java Build Path -> 点开Maven Dependencies -> 找到被引用的牛奶瓶,即core项目的jar包 -> 点开左边的箭头 -> 点击Source attchment -> 点Edit -> 选择该jar包所对应的源码包(这里是我本地工程core项目) -> 点OK。
针对本问题,以上操作可以解决debug跳转到class文件显示奇怪的问题,但实际上治标不治本。为什么这么说呢?回到maven打包现象来,在打war包时core包是从仓库里下载的,说明它找不到本地项目,所以我特意去看了war包的pom文件:
<dependency>
<groupId>cn.wlf.wulinfeng</groupId>
<artifactId>growup-core</artifactId>
<version>0.4.0-SNAPSHOT</version>
</dependency>
然后我又看了core包的pom文件:
<artifactId>growup-core</artifactId>
<version>0.4.0</version>
<packaging>jar</packaging>
从版本号可以很明显的看出,这是两个core包。war包里依赖了的growup-core-0.4.0-SNAPSHOT,而本地的core打出来的叫growup-core-0.4.0,当然无法依赖了,所以它只能去仓库里下载growup-core-0.4.0-SNAPSHOT来依赖。上面解决第二个问题的做法实际上是把war包里依赖的growup-core-0.4.0-SNAPSHOT包的源码包设置未本地项目的growup-core-0.4.0而已。
到这里解决第一个问题的办法一目了然:修改version一致,重新打包。
maven打war包后无法依赖本地工程的jar包,造成debug时跳到class文件而不是本地java文件的更多相关文章
- 【Selenium-WebDriver实战篇】Eclipse上的maven使用JsonObject时,添加依赖后无法自动下载相应的jar包
==================================================================================================== ...
- eclipse上的maven,添加依赖后无法自动下载相应的jar包
报错信息: Failed to read artifact descriptor for org.quartz-scheduler:quartz-jobs:jar:2.2.3 org.eclipse ...
- Maven第四篇【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】
搭建私有服务器 前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找->私有仓库->中心仓库- 然而,我们的本地仓库常常没有想要的 ...
- maven向本地仓库导入jar包(处理官网没有的jar包)
对于官网没有的jar包,maven向本地仓库导入jar包用如下命令 mvn install:install-file -DgroupId=包名 -DartifactId=项目名 -Dversion=版 ...
- maven项目导入依赖jar包并打包为可运行的jar包
1.在pom.xml文件中添加插件 <build> <finalName>LeadServer</finalName> <!-- jar包名前缀,如果没有指定 ...
- 用Maven快速生成带有依赖的可执行jar包
一.背景 最近项目在做微服务的拆分,那么我们想让我们的容器启动更加的轻量级,所以我们选择放弃tomcat等容器,而是通过maven生成带有指定依赖的可执行jar包的方式进行处理,本文我将分享如何通过m ...
- 解决Maven本地仓库没有Jar包问题,请求中央仓库自动下载以及手动下载方法
一.首先指定本地仓库 <localRepository>D:\software\Maven_Home\mvn_repository</localRepository> 二.修改 ...
- 手动mvn install指令向maven本地仓库安装jar包
mvn install:install-file -DgroupId=imsdriver(jar包的groupId) -DartifactId=imsdriver(jar包的artifactId) - ...
- Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
随机推荐
- 用Java编程计算出所有的"水仙花数"
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个 "水仙花数 ",因 ...
- 【Python】函数的参数对应
我们已经接触过函数(function)的参数(arguments)传递.当时我们根据位置,传递对应的参数.我们将接触更多的参数传递方式. 回忆一下位置传递: def f(a,b,c): return ...
- 【Python】生成器和迭代器
l=[1,2,3,4] for n in l: print n 在看上面这段代码的时候,我们没有显式的控制列表的偏移量,就可以自动的遍历了整个列表对象.那么for 语句是怎么来遍历列表l的呢?要回答这 ...
- Ajax中的XMLHttpRequest对象详解(转)
XMLHttpRequest对象是Ajax技术的核心.在Internet Explorer 5中,XMLHttpRequest对象以ActiveX对象引入,被称之为XMLHTTP,它是一种支持异步请求 ...
- 【转载】Git,Github和Gitlab简介和基本使用Gitlab安装和使用
http://blog.csdn.net/u011241606/article/details/51471367
- 广义线性模型(GLM)
一.广义线性模型概念 在讨论广义线性模型之前,先回顾一下基本线性模型,也就是线性回归. 在线性回归模型中的假设中,有两点需要提出: (1)假设因变量服从高斯分布:$Y={{\theta }^{T}}x ...
- brew: Nginx https config
下载安装Brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mas ...
- CBP是什么?
coded_block_pattern 简称CBP,用来反映该宏块编码中残差情况的语法元素.CBP共有6位,其中前面2位代表UV分量,描述如下表所示:后面4位是Y分量,分别代表宏块内的4个8x8子宏 ...
- 转: Photon 3.4 Changed Logs ..
最新版了.修了很多bug. Photon 3.4 http://doc.exitgames.com/en/onpremise/current/reference/version-history/pho ...
- android知识点大总结
1.掌握Android编程的基本概念与要点,Android SDK及其开发环境搭建.Android项目结构分析.2.Android 应用设计模式.文件系统.3.文件形式的数据存储与访问.SDCard卡 ...