如何使用TFS Java SDK 14.0.3获取并修改build-main.xml后签入TFS
使用TFS Java SDK 14.0.3操作XML文件:获取、修改与签入
我来帮你梳理完整的实现步骤,结合TFS Java SDK 14.0.3的特性,一步步搞定获取、修改和签入build-main.xml的需求:
1. 完善工作区创建与映射代码
首先得把工作区创建和路径映射的逻辑补全,这是后续操作的基础:
public static Workspace createAndMapWorkspace(final TFSTeamProjectCollection tpc) { final String workspaceName = "TempBuildWorkspace"; final String localPath = "C:/temp/tfs-build-workspace"; // 本地映射目录,需确保已创建 final String serverFolderPath = "$/master-builds/master-build"; // TFS服务器上的目标文件夹路径 // 获取版本控制客户端实例 VersionControlClient vcc = tpc.getClient(VersionControlClient.class); try { // 检查同名工作区是否存在,存在则先删除(按需调整,也可复用现有工作区) Workspace existingWorkspace = vcc.getWorkspace(workspaceName, vcc.getAuthorizedUser()); if (existingWorkspace != null) { existingWorkspace.delete(); } // 创建新工作区 Workspace workspace = vcc.createWorkspace( workspaceName, vcc.getAuthorizedUser(), "临时工作区:修改build-main.xml版本号" ); // 映射服务器文件夹到本地路径 workspace.map(serverFolderPath, localPath); System.out.println("工作区创建并映射完成:" + workspace.getName()); return workspace; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("创建工作区失败", e); } }
2. 将服务器上的build-main.xml拉取到本地
工作区就绪后,执行Get操作获取最新版本的文件:
public static void fetchBuildXml(Workspace workspace) { String serverFilePath = "$/master-builds/master-build/build-main.xml"; GetOptions getOptions = new GetOptions(); getOptions.setGetAll(true); // 确保获取最新完整版本 try { workspace.get( new ItemSpec(serverFilePath, RecursionType.NONE), LatestVersionSpec.INSTANCE, getOptions ); System.out.println("成功拉取build-main.xml到本地目录"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("拉取文件失败", e); } }
3. 修改XML文件中的版本号
这部分需要根据你的XML结构调整节点定位逻辑,假设版本号在<version>节点下:
public static void updateXmlVersion(String localXmlPath, String newVersion) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new File(localXmlPath)); // 定位版本节点(请根据你的XML结构调整,比如用XPath精准查找) Node versionNode = doc.getElementsByTagName("version").item(0); if (versionNode != null) { versionNode.setTextContent(newVersion); System.out.println("版本号已更新为:" + newVersion); } else { throw new RuntimeException("XML文件中未找到版本节点"); } // 保存修改后的文件 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File(localXmlPath)); transformer.transform(source, result); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("修改XML文件失败", e); } }
4. 签入修改后的文件
最后把修改后的文件提交回TFS,需要先标记变更,再执行签入:
public static void checkInModifiedFile(Workspace workspace, String localXmlPath, String comment) { try { // 标记文件为编辑状态,添加到待变更列表 workspace.pendEdit(localXmlPath); // 获取待变更项 PendingChange[] pendingChanges = workspace.getPendingChanges(); if (pendingChanges.length == 0) { System.out.println("没有需要签入的变更"); return; } // 执行签入 int changesetId = workspace.checkIn(pendingChanges, comment); System.out.println("文件签入成功,变更集ID:" + changesetId); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("签入文件失败", e); } }
5. 整合所有步骤的主流程
把上面的方法串起来,完成完整操作:
public static void main(String[] args) { // 替换为你的TFS服务器地址 String tfsServerUrl = "http://your-tfs-server:8080/tfs/DefaultCollection"; TFSTeamProjectCollection tpc = null; try { // 连接TFS服务器 tpc = TFSTeamProjectCollectionUtils.openCollection(new URI(tfsServerUrl)); // 创建工作区 Workspace workspace = createAndMapWorkspace(tpc); // 拉取XML文件 String localXmlPath = "C:/temp/tfs-build-workspace/build-main.xml"; fetchBuildXml(workspace); // 修改版本号 updateXmlVersion(localXmlPath, "2.1.0"); // 替换为目标版本号 // 签入变更 checkInModifiedFile(workspace, localXmlPath, "更新build-main.xml的版本号至2.1.0"); // 可选:删除临时工作区 workspace.delete(); System.out.println("临时工作区已清理"); } catch (Exception e) { e.printStackTrace(); } finally { if (tpc != null) { tpc.close(); } } }
内容的提问来源于stack exchange,提问作者Ansar Samad
相关产品推荐
相关产品推荐

