普通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

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.测试。

启动测试正常。

相关推荐
鱼跃鹰飞5 小时前
设计模式系列:工厂模式
java·设计模式·系统架构
时见先生5 小时前
Python库和conda搭建虚拟环境
开发语言·人工智能·python·自然语言处理·conda
a努力。5 小时前
国家电网Java面试被问:混沌工程在分布式系统中的应用
java·开发语言·数据库·git·mysql·面试·职场和发展
Yvonne爱编码5 小时前
Java 四大内部类全解析:从设计本质到实战应用
java·开发语言·python
wqwqweee5 小时前
Flutter for OpenHarmony 看书管理记录App实战:搜索功能实现
开发语言·javascript·python·flutter·harmonyos
J2虾虾5 小时前
SpringBoot和mybatis Plus不兼容报错的问题
java·spring boot·mybatis
yongui478346 小时前
基于MATLAB的NALM锁模光纤激光器仿真实现
开发语言·matlab
毕设源码-郭学长6 小时前
【开题答辩全过程】以 基于springboot 的豪华婚车租赁系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
-To be number.wan7 小时前
Python数据分析:numpy数值计算基础
开发语言·python·数据分析
Cx330❀8 小时前
【优选算法必刷100题】第038题(位运算):消失的两个数字
开发语言·c++·算法·leetcode·面试