问题现象:项目结构如下

  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. Spring Boot 中配置切换

    步骤一:切换需求 有时候在本地测试是使用8080端口(默认端口),可是上线时使用的比如是9090端口(不常用的,以防被黑). 此时就可以通过多配置文件实现多配置支持与灵活切换. 步骤二:多配置文件 3 ...

  2. oracle 结构化语言查询 DML DDL DCL

    --结构化查询语言 (Structured Query Language),具有定义. --查询.更新和控制等多种功能,是关系数据库的标准语言. --SQL分类: -- 数据操纵语言DML Data ...

  3. 爬虫第六篇:scrapy框架爬取某书网整站爬虫爬取

    新建项目 # 新建项目$ scrapy startproject jianshu# 进入到文件夹 $ cd jainshu# 新建spider文件 $ scrapy genspider -t craw ...

  4. mysql数据库优化课程---12、mysql嵌套和链接查询

    mysql数据库优化课程---12.mysql嵌套和链接查询 一.总结 一句话总结:查询user表中存在的所有班级的信息? in distinct mysql> select * from cl ...

  5. flask学习(二):认识web

    url详解: URL是Uniform Resource Locator 的简写,统一资源定位符 一个URL由以下及几部分组成: scheme://host:port/path/?query-strin ...

  6. 方便处理hosts的批处理脚本:hosts助手.bat

    hosts助手.bat @echo off pushd "%~dp0" set sp0=------------------ set sp1=hosts助手 set hostsfi ...

  7. ES6相关文章

    1.https://www.cnblogs.com/xiaotanke/p/7448383.html (export ,export default 和 import 区别 以及用法)

  8. java中Arrays和Collections等工具类

    java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的.具有以下功能: ² 给数组赋值:通过fill方法. ² 对数组排序:通过sort方法,按升序. ² 比较数组:通过equ ...

  9. postgresql recovery.conf文件内容说明

    在配置PG主备流复制.HA时,需要用到recovery.conf文件,这里根据自己的了解做个记录: standby_mode = 'on' #说明自己是备库 primary_conninfo = 'u ...

  10. Arcgis for Js实现graphiclayer的空间查询

    本节讲的是Arcgis for Js的针对graphiclayer的空间查询,内容很简单,代码如下: <!DOCTYPE html> <html> <head> & ...