以前写的老项目,转为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.测试。
启动测试正常。