问题现象:项目结构如下

  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文件的更多相关文章

  1. 【Selenium-WebDriver实战篇】Eclipse上的maven使用JsonObject时,添加依赖后无法自动下载相应的jar包

    ==================================================================================================== ...

  2. eclipse上的maven,添加依赖后无法自动下载相应的jar包

    报错信息: Failed to read artifact descriptor for org.quartz-scheduler:quartz-jobs:jar:2.2.3  org.eclipse ...

  3. Maven第四篇【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】

    搭建私有服务器 前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找->私有仓库->中心仓库- 然而,我们的本地仓库常常没有想要的 ...

  4. maven向本地仓库导入jar包(处理官网没有的jar包)

    对于官网没有的jar包,maven向本地仓库导入jar包用如下命令 mvn install:install-file -DgroupId=包名 -DartifactId=项目名 -Dversion=版 ...

  5. maven项目导入依赖jar包并打包为可运行的jar包

    1.在pom.xml文件中添加插件 <build> <finalName>LeadServer</finalName> <!-- jar包名前缀,如果没有指定 ...

  6. 用Maven快速生成带有依赖的可执行jar包

    一.背景 最近项目在做微服务的拆分,那么我们想让我们的容器启动更加的轻量级,所以我们选择放弃tomcat等容器,而是通过maven生成带有指定依赖的可执行jar包的方式进行处理,本文我将分享如何通过m ...

  7. 解决Maven本地仓库没有Jar包问题,请求中央仓库自动下载以及手动下载方法

    一.首先指定本地仓库 <localRepository>D:\software\Maven_Home\mvn_repository</localRepository> 二.修改 ...

  8. 手动mvn install指令向maven本地仓库安装jar包

    mvn install:install-file -DgroupId=imsdriver(jar包的groupId) -DartifactId=imsdriver(jar包的artifactId) - ...

  9. Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

随机推荐

  1. Jenkins自动打包配置

    当时也是花费了不少时间来配置Jenkins自动打包的问题,觉得还是需要记录一下. 1.安装Jenkins,这个很简单,不需要多说. 2.下载Git Plugin,Gradle Plugin,Andro ...

  2. JDK__下载地址

    1. http://www.oracle.com/technetwork/java/archive-139210.html ZC: 貌似 从JDK7开始,有for ARM的版本,类似 : “Linux ...

  3. BZOJ 1835 [ZJOI2010]base 基站选址:线段树优化dp

    传送门 题意 有 $ n $ 个村庄在一排直线上,现在要建造不超过 $ K $ 个通讯基站,基站只能造在村庄处. 第 $ i $ 个村庄距离第 $ 1 $ 个村庄的距离为 $ D_i $ .在此建造基 ...

  4. 七 web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理

    如果爬虫没有异常处理,那么爬行中一旦出现错误,程序将崩溃停止工作,有异常处理即使出现错误也能继续执行下去 1.常见状态吗 301:重定向到新的URL,永久性302:重定向到临时URL,非永久性304: ...

  5. 在Hive中使用Avro

    作者:过往记忆 | 新浪微博:左手牵右手TEL | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明博客地址:http://www.iteblog.com/文章标题:<在Hiv ...

  6. 《The Cg Tutorial》阅读笔记——光照 Lighting

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4796306.html 光照 Lighting 一.常见的几种光照模型 二.基本的光照 ...

  7. 25-THREE.JS 绘制线框样式几何图形的材质 线材质

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  8. tomcat映射物理路径

    <Context path="/woyoubaoweb/upload" docBase="/opt/file/image/woyoubaoweb/upload&qu ...

  9. css选择器的特殊性值

    今天从前端那拿来写好的页面,就开始动工,首先,照旧处理导航栏高亮的问题, 说到处理高亮的问题,不同的人会有不同的方法,比如: //类名为nav的元素下的第n个a元素 .nav a:nth-of-typ ...

  10. SQL-left(right,inner) join

    left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) ...