普通java web项目转为maven项目

以前写的老项目,转为maven项目管理,关键是涉及的jar比较多,手动改工作量太大。

项目环境:eclipse、jdk8、jetty嵌入式启动。

1.创建一个新的maven项目。

2.拷贝源码。

将老项目src目录下的源码拷贝到新项目的src/main/java目录下。

3.拷贝WebRoot等其他文件夹。

4.(关键)配置pom.xml。添加相应的依赖。

原有的jar如果要手动配置maven依赖的话,涉及到170多个jar,工作量大,而且很多jar都比较旧了,相关依赖可能比较难找,并且容易导致jar冲突或者版本不一致导致系统不问题。

针对上面问题,我的解决办法是直接将需要的jar重新安装到maven仓库去,统一这些jar的groupId,然后在生成对应的pom.xml依赖配置。具体实现参考MavenUtil.java 

package com.xpl.util;import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**** Maven工具包* @author xpl 2024-10-19*/
public class MavenUtil {/**** 执行cmd命令* @param command  如  cmd /c systeminfo* @return*/public static String cmd(String[] command, String charsetname ) {charsetname = charsetname == null ? "GBK" : charsetname;Runtime runtime = Runtime.getRuntime();InputStream is = null;ByteArrayOutputStream byteArrayOutputStream = null;try {Process process = runtime.exec(command);is = process.getInputStream();byteArrayOutputStream = new ByteArrayOutputStream();byte[] buff = new byte[2048];int len;while((len = is.read(buff)) != -1) {byteArrayOutputStream.write(buff, 0, len);}return  byteArrayOutputStream.toString(charsetname);} catch (IOException e) {e.printStackTrace();}finally {if(byteArrayOutputStream != null){try {byteArrayOutputStream.close();} catch (IOException e) {e.printStackTrace();}}if(is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}}return null;}/**** jar安装到本地maven仓库* @param filePath* @param groupId* @param artifactId* @param version* @return*/public static boolean installJar(String filePath, String groupId, String artifactId, String version){String command = "mvn install:install-file -Dfile="+filePath+"    -DgroupId="+groupId+"   -DartifactId="+artifactId+"      -Dversion="+version+"    -Dpackaging=jar";boolean flag = true;String rs = "";try{rs = cmd(new String[]{"cmd", "/C", command}, "GBK");
//			System.out.println(rs);if(rs != null && rs.indexOf("BUILD SUCCESS")>= 0){flag = true;}else{flag = false;}}catch (Exception e) {flag = false;e.printStackTrace();}if(flag){System.out.println("安装成功:" +artifactId);}else{System.err.println("安装失败:" +artifactId);System.err.println(rs);}return flag;}/**** 批量安装jar* @param list* @return*/public static boolean installJars(List<String> list){for (String string : list) {String filePath = "F:\\workspace\\javaFX\\xpl\\" + string.replace('/', '\\');String groupId = "xpl.jfinal";String artifactId = string.substring(string.lastIndexOf('/')+1, string.lastIndexOf('.'));String version = "1.0.0";installJar(filePath, groupId, artifactId, version);}return true;}/**** 获取普通java web项目的依赖jar包列表。* @param classpath* @return*/public static List<String> getJars(String classpath){File oldFile = new File(PathUtil.getProjectPath() + "/.classpath");FileInputStream fis = null;InputStreamReader isr = null;BufferedReader br  = null;List<String> list = new ArrayList<String>();try{//文件读取流fis= new FileInputStream(oldFile);isr=new InputStreamReader(fis, "UTF-8");br = new BufferedReader(isr);String line = "";String[] arrs = null;while ((line=br.readLine())!=null) {if(line.indexOf("kind=\"lib\"") != -1 ){list.add(RegexUtil.findString(line, "path=\"(.*?)\"", 1));}}} catch (IOException e) {e.printStackTrace();}finally {close(br);close(isr);close(fis);}return list;}/**** 生成maven的依赖配置* @param list* @return*/public static String getPOM(List<String> list){StringBuffer sb = new StringBuffer();for (String string : list) {String groupId = "xpl.jfinal";String artifactId = string.substring(string.lastIndexOf('/')+1, string.lastIndexOf('.'));String version = "1.0.0";sb.append("<dependency>\n");sb.append("	<groupId>"+groupId+"</groupId>\n");sb.append("	<artifactId>"+artifactId+"</artifactId>\n");sb.append("	<version>"+version+"</version>\n");sb.append("</dependency>\n");}return sb.toString();}public static void close(Closeable obj){if(obj != null){try {obj.close();} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {//安装到本地String filePath = "${项目路径}\\.classpath";installJars(getJars(filePath ));//生成maven依赖配置System.out.println(getPOM(getJars(filePath )));}}

先安装jar到本地maven,然后将生成的依赖配置拷贝的新项目的pom.xml中。

5.测试。

启动测试正常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

压缩SQL Server 2014 数据库日志文件

一开始没有设置好&#xff0c;数据库的日志文件膨胀到了3个G 以下使用Sql语句压缩日志文件的方法 注意用自己的数据库名称替换测试数据库名称&#xff1a;Dealer GOALTER DATABASE Dealer SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE Dealer SET RECOVERY SIMPLE -…

vscode配色主题推荐:Andromeda !

vscode配色主题推荐:Andromeda ! 图标库 vscode-icons ! Andromeda:Dark theme with a taste of the universe&#xff1b; 仙女座&#xff1a;一套宇宙深空体验的哑暗色主题; 高对比度,色彩饱和; Easy Installation Open the extensions sidebar on Visual Studio CodeSearc…

【设计模式-简单工厂】

定义 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;用于通过一个工厂类来创建某个产品类的实例&#xff0c;而不直接在客户端&#xff08;调用方&#xff09;中实例化对象。 这种模式的主要思想是将对象的创建逻辑集中在一个…

判断自己的mac是macOS x64 还是macOS ARM64

在终端输入 uname -a 这样的是x64 这样的是ARM64

基于深度学习的声纹识别

基于深度学习的声纹识别&#xff08;Speaker Recognition&#xff09;是一种通过分析和识别人的声音特征来确认身份的技术。声纹识别技术广泛应用于安全验证、智能助手、银行身份识别等场景。近年来&#xff0c;随着深度学习技术的发展&#xff0c;声纹识别的准确性和鲁棒性得到…

Skydel 24.9版本震撼发布,升级五大关键功能

在信号传播与仿真领域&#xff0c;Skydel软件一直是行业内的佼佼者。我们与您分享升级快讯&#xff0c;Skydel软件24.9.0版本已正式发布&#xff0c;此次更新不仅带来了五大全新功能&#xff0c;还在性能优化、用户体验以及远程API方面进行了全面升级&#xff0c;为用户带来更高…

Spring Cloud微服务技术选型指南

Spring Cloud微服务技术选型指南 随着软件架构从单体应用向微服务转变&#xff0c;Spring Cloud作为一种强大的微服务架构开发工具被广泛采用。它提供了一系列组件和工具来简化微服务架构的开发、部署和管理。本博客将探讨Spring Cloud微服务技术选型的各个方面&#xff0c;帮…

面试题:如何能够保证T2在T1执行完后执行,T3在T2执行完后执行?——CountDownLatch原理

CountDownLatch的使用方式 CountDownLatch用于某个线程等待其他线程执行完任务再执行&#xff0c;与thread.join()功能类似。常见的应用场景是开启多个线程同时执行某个任务&#xff0c;等到所有任务执行完再执行特定操作&#xff0c;如汇总统计结果。 面试题&#xff1a;如何…

最新Java零基础知识(持续更新中......)

1. 学习前的准备 一个好的学习方法&#xff08;如何更高效学习&#xff09;&#xff1a; 成为一名合格的程序员&#xff0c;需要具备两个关键能力&#xff1a; 指法速度&#xff1a;高效的代码输入速度。编程思想&#xff1a;能够用编程的方式解决现实问题的能力。 指法速度&am…

SpringBoot中的Component和ComponentScan注解工作原理

Spring IoC 容器的工作是通过管理对象的生命周期和配置来保持业务逻辑清晰&#xff0c;但是 Spring 容器并不会自动知道要管理哪些 bean。所以我们来告诉 Spring 应该处理哪些 bean 以及如何处理&#xff0c;很简单这就是 Spring 的 Component 和 ComponentScan 注释的作用所在…

算法题总结(二十)——并查集

并查集理论基础 并查集常用来解决集合连通性问题&#xff0c;两个节点在不在一个集合&#xff0c;也可以将两个节点添加到一个集合中。 大白话就是当我们需要判断两个元素是否在同一个集合里的时候&#xff0c;我们就要想到用并查集。 并查集主要有两个功能&#xff1a; 将…

[数据采集技术:实践02]:requests,lxml,BeautifulSoup模块的使用

要求 1.创建项目文件夹&#xff0c;命名为&#xff1a;学号-2&#xff0c;如&#xff1a;20220001-2。后续所有文 件均放在此文件夹中。 requests 模块和 lxml 模块中的 XPath的使用 2.新建 test1.py 文件&#xff0c;使用 requests 模块和 lxml 模块中的 XPath&#xff0c;…

Spring Boot 实现 WebSocket(注解方式)

本文介绍如何使用 Spring Boot 的注解方式实现一个简单的 WebSocket 服务&#xff0c;支持客户端与服务器之间进行实时通信。 1. 引入依赖 在 pom.xml 文件中添加 WebSocket 相关依赖。 <dependencies><!-- Spring Boot WebSocket 支持 --><dependency>&l…

linux介绍与基本指令

前言 本次博客将会讲解linux的来源历史、linux操作系统的理解以及它的一些基本指令。 1.linux的介绍 linux的来源 linux的来源最初还是要说到unix操作系统的。 1968年&#xff0c;一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作…

Kafka系列之:Kafka集群新增节点后实现数据均衡

Kafka系列之:Kafka集群新增节点后实现数据均衡 一、背景二、Kafka集群快速负载均衡方案三、按照Topic负载均衡Kafka系列之:使用Kafka Manager实现leader分区平衡和broker节点上分区平衡一、背景 Kafka集群新增节点,要使得每个节点数据均衡,在增加完kafka topic分区后,要进…

Qt中自定义qDebug打印信息的宏(文件名,行数,函数名,日期,时间等前缀)并取消打印

使用qDebug()打印信息时&#xff0c;默认打印"<<"符号后面的信息。 通过自定义宏&#xff0c;可以额外打印文件名&#xff0c;行数&#xff0c;函数&#xff0c;日期、时间等前缀&#xff0c;方便快速定位调式信息的位置。 同时&#xff0c;可以定义宏取消打…

AI学习指南深度学习篇-对比学习的数学原理

AI学习指南深度学习篇——对比学习的数学原理 引言 在深度学习的领域中&#xff0c;对比学习作为一种无监督学习方法&#xff0c;逐渐引起了学术界和工业界的广泛关注。对比学习通过对样本间的相似性度量&#xff0c;来提升模型的特征表示能力&#xff0c;成为近年来研究的热…

C语言 | Leetcode C语言题解之第502题IPO

题目&#xff1a; 题解&#xff1a; #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX_INT_NUMBER 0x7FFFFFFEtypedef struct {int capital;int profit; } ProNode;int CompareProfit(const ProNode *a, const ProNode *b) { /* 从大到小排序 */return b->pr…

根据发生异常的汇编指令以及函数调用堆栈,从内存的角度出发,估计出问题的可能原因,确定排查方向,快速定位C++软件问题

目录 1、前言 2、初步分析dump文件 3、加载更多模块的pdb文件&#xff0c;可能能看到更多行的函数调用堆栈 4、从内存的角度去看&#xff0c;估计是访问了野指针导致的&#xff0c;沿着这个怀疑的方向快速地定位了问题 5、最后 C软件异常排查从入门到精通系列教程&#xf…

力扣OJ算法题:合并两个有序链表

—————————————————————————————————————————— 正文开始 OJ算法题&#xff1a;合并两个有序链表 思路 创建一个新的空链表&#xff08;可以用malloc优化&#xff09;和两个指针L1、L2分别指向两个链表&#xff0c;遍历两个链表&am…