`

myeclipse转eclipse jee的工程文件补丁(主要是maven补丁)

阅读更多
以下是用来将myeclipse(或者其他没有加maven配置的工程)的工程文件装换到最新的m2eclipse插件所能识别的格式,
简单来说就是修改.project和.classpath
使用方法:
1. 在workspace任意层级下(当然啦,这个workspace的名字要包含"workspace"字样),运行: java EclipseM2Patch
2. 在任意目录下指定workspace目录,运行: java EclipseM2Patch /java/workspace
运行后将会对workspace下的所有需要patch工程文件进行patch,如果不满意还可以回滚,满意就删除所有备份文件。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class EclipseM2Patch {

	private static String fileToString(File f) throws Exception {
		byte[] bytes = fileToBytes(f);
		if (bytes.length == 0)
			return null;
		return new String(bytes, "iso-8859-1");
	}

	private static byte[] fileToBytes(File f) throws Exception {
		if (!f.exists())
			return null;
		FileInputStream fis = null;
		byte[] all = new byte[0];
		try {
			byte[] buf = new byte[1024];
			fis = new FileInputStream(f);
			int read = -1;
			while ((read = fis.read(buf)) != -1) {
				byte[] tmp = new byte[all.length + read];
				if (all.length > 0)
					System.arraycopy(all, 0, tmp, 0, all.length);
				System.arraycopy(buf, 0, tmp, all.length, read);
				all = tmp;
			}
		} finally {
			if (fis != null)
				fis.close();
		}
		return all;
	}

	private static void write(File f, String content) throws Exception {
		FileOutputStream fos = new FileOutputStream(f);
		try {
			fos.write(content.getBytes("iso-8859-1"));
		} finally {
			fos.close();
		}
	}

	private static File backup(File f) throws Exception {
		byte[] bytes = fileToBytes(f);
		if (bytes.length > 0) {
			File backupfile = new File(f.getAbsoluteFile() + ".patchbackup");
			FileOutputStream fos = new FileOutputStream(backupfile);
			try {
				fos.write(bytes);
			} finally {
				fos.close();
			}
			return backupfile;
		}
		return null;
	}

	public static void main(String[] args) throws Exception {
		String workspacepath = args.length == 0 ? null : args[0];
		if (workspacepath == null) {
			File file = new File(".");
			String p = file.getAbsolutePath().replaceAll("(?i)(workspace[^\\\\/]+).*", "$1");
			if (p.length() != file.getAbsolutePath().length()) {
				workspacepath = p;
			}
		}
		if (workspacepath == null) {
			throw new IllegalAccessException();
		}
		ArrayList<File> backups = new ArrayList<File>();
		File workspace = new File(workspacepath);
		for (File projectBaseDir : workspace.listFiles()) {
			if (projectBaseDir.isDirectory()
					&& projectBaseDir.getName().matches("^\\p{Alpha}[\\p{Alpha}_-]+$")) {
				File _project = new File(projectBaseDir, ".project");
				File _classpath = new File(projectBaseDir, ".classpath");
				if (_project.exists()) {
					String content = fileToString(_project);
					String addToContent = "<nature>org.eclipse.m2e.core.maven2Nature</nature>";
					if (!content.contains(addToContent)) {
						File backupfile = backup(_project);
						if (backupfile != null)
							backups.add(backupfile);
						content = content.replaceAll("(?im)(\\s+)(?=</natures>)", "$1\t" + addToContent
								+ "$1");
						write(_project, content);
						System.out.println("file:" + _project + " - patched");
					} else {
						File backupfile = new File(_project.getAbsoluteFile() + ".patchbackup");
						if (backupfile.exists()) {
							backups.add(backupfile);
						}
					}
				}
				if (_classpath.exists()) {
					String content = fileToString(_classpath);
					String addToContent = "<classpathentry kind=\"con\" path=\"org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER\"/>";
					if (!content.contains("org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER")) {
						File backupfile = backup(_classpath);
						if (backupfile != null)
							backups.add(backupfile);
						content = content.replaceAll("(?im)(\\s+)(?=</classpath>)", "$1\t" + addToContent
								+ "$1");
						write(_classpath, content);
						System.out.println("file:" + _classpath + " - patched");
					} else {
						File backupfile = new File(_classpath.getAbsoluteFile() + ".patchbackup");
						if (backupfile.exists()) {
							backups.add(backupfile);
						}
					}
				}
			}
		}
		BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		if (backups.size() > 0) {
			System.out.println(">Delete all backups?(Y-yes/N-no/R-rollback)");
			line = rd.readLine();
			for (File f : backups) {
				if ("y".equalsIgnoreCase(line)) {
					boolean delete = f.delete();
					System.out.println("Delete file:" + f + " - " + (delete ? "ok" : "fail"));
				} else if ("r".equalsIgnoreCase(line)) {
					File file = new File(f.getAbsolutePath().replace(".patchbackup", ""));
					boolean result = file.delete();
					if (result)
						result = f.renameTo(file);
					System.out.println("Rollback file:" + f + " - " + (result ? "ok" : "fail"));
				}
			}
		}
		System.out.println(">Press any key to continue...");
		line = rd.readLine();
		rd.close();
	}
}
 
分享到:
评论

相关推荐

    eclipse-jee-2020-06-R-win32-x86_64

    《Eclipse JEE 2020-06 R Win32 x86_64:集成开发环境的深度解析》 Eclipse JEE 2020-06 R Win32 x86_64是专为Windows 32位及64位平台设计的一款强大的Java集成开发环境(IDE),特别适用于企业级Java应用的开发。...

    eclipse-jee-2021-12-RC1-win32-x86_64.zip

    7. **插件扩展**:Eclipse的开放性允许用户安装各种第三方插件,扩展其功能,如Maven、Spring、MyEclipse等。 下载并解压Eclipse JEE 2021-12 RC1 Win32 x86_64.zip后,你可以找到名为“eclipse”的文件夹,里面...

    eclipse-jee-2021-06-R-win32-x86_64.zip

    Eclipse是一款流行的开源软件,主要用于Java和其他编程语言的开发,尤其是对于Java企业版(Java Enterprise Edition,简称JEE)的支持。 描述中的 "eclipse-jee-2021-06-R-win32-x86_64.zip" 与标题相同,暗示这个...

    eclipse-jee-helios-SR1-win32-x86_64

    "eclipse-jee-helios-SR1-win32-x86_64" 是Eclipse针对Java企业版(Java Enterprise Edition, JEE)的一个特定版本,名为Helios Service Release 1,适用于64位的Windows操作系统。 Helios是Eclipse的一个重要版本...

    Eclipse JavaEE 2020-03最新版 eclipse-jee-2020-03-R-incubation-win32-x86_64.zip

    6. **压缩包内容**: "eclipse"是压缩包中的主要文件,解压后会得到Eclipse IDE的启动程序和所有相关文件。这个文件夹通常包括工作台(workspace)、插件、配置文件以及启动脚本等,使得用户可以直接运行Eclipse进行...

    eclipse-jee-2021-03-R-win32-x86_64.zip

    在Eclipse-JEE-2021-03-R-win32-x86_64.zip压缩包中,"eclipse"文件应该包含整个Eclipse IDE的结构,包括工作台、视图、编辑器、透视图等组件。在安装和使用过程中,用户可以自定义布局,选择适合自己的开发环境。 ...

    eclipse配置maven-tomcat-svn.docx

    - 打开 Eclipse,依次选择 `Window &gt; Preferences &gt; Maven`(如果是 MyEclipse,则操作路径相似)。 - 进行 Maven 的相关配置,包括设置 Maven 的用户设置文件(即前面提到的 `settings.xml` 文件路径)、配置 Maven...

    Eclipse,MyEclipse开发Web项目.doc

    在本文档中,我们将深入探讨如何使用Eclipse和MyEclipse这两个强大的集成开发环境(IDE)来开发Web项目。这些IDE是Java开发者的重要工具,尤其在构建Web应用程序时,它们提供了丰富的功能和高效的工作流程。 1. **...

    eclipse_java_2020-03安装包.7z

    同时,Eclipse作为一个高度可扩展的平台,用户可以通过Eclipse Marketplace或其他途径安装各种插件,以满足特定的开发需求,如Spring工具集、MyEclipse、Git客户端等。 在使用Eclipse时,了解基本的操作如创建项目...

    eclipse安装包64位 oxygen

    Eclipse是一款广受欢迎的开源集成开发环境(IDE),主要用于Java编程,同时也支持其他语言如C++, Python等。这里我们讨论的是64位版本的Eclipse Oxygen,它在开发社区中因其稳定性和丰富的功能集而备受推崇。...

    Myeclipse优化JBPM4.0配置

    如遇eclipse.exe启动错误,修改eclipse.ini文件,移除不适用的配置行。 通过上述步骤,开发者可以有效地配置Myeclipse以优化JBPM4.0的工作流开发环境,确保各组件之间协调工作,提升开发效率和项目质量。

    ruoyi-vue2资源

    Eclipse的插件如MyEclipse或Maven可以方便地集成Spring Boot(Ruoyi可能基于的后端框架)和MySQL驱动,帮助开发者快速构建数据库连接和执行SQL语句。此外,Eclipse的版本控制系统集成(如Git)可协助团队协作,确保...

    JavaEE开发工具-经典稳定版-霓虹灯

    通过下载并安装`eclipse-jee-neon-2-win32-x86_64`这个压缩包,开发者可以获得一个配置好的Eclipse IDE,专为JavaEE开发设计,可以直接开始构建和管理复杂的业务应用。 在实际开发过程中,配合Eclipse的其他插件,...

    OA办公系统 Springboot vue.js前后分离,Flowable工作流自定义表单

    标题所揭示的知识点主要包括了OA办公系统开发中所采用的技术栈,以及系统的特点。描述部分则详细介绍了整个系统的开发环境、框架依赖、前后...开发工具推荐使用Eclipsejee 4.9.0版,虽然不再支持太老版本的MyEclipse。

Global site tag (gtag.js) - Google Analytics