之前有过一篇python的实现http://blog.csdn.net/wiker_yong/article/details/10334967

1,新增文件post-commit.bat

内容:

rem REPOS-PATH (the path to this repository)
set REPOS=%1
rem REV (the number of the revision just committed)
set REV=%2 set HOOK_DIR=F:/Repositories/版本库名/hooks
java -jar %HOOK_DIR%/SendMail.jar %REPOS% %REV%

放在F:/Repositories/版本库名/hooks下(依具体路径而定,此处仅做参考)

2,SVNSendMail.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; /**
* @author Wiker Yong Email:<a href="mailto:wikeryong@gmail.com">wikeryong@gmail.com</a>
* @date 2013-8-27 上午10:28:54
* @version 1.0-SNAPSHOT
*/
public class SVNSendEmail { private static String VERSION = null;
private static String REPOSITORIES = null;
private static String SVNLOOK_BIN_PATH = "C:/Program Files/VisualSVN Server/bin/svnlook.exe"; //VisualSVN Server安装目录 private static String emailSubject = "SVN 变更通知"; //邮件主题 public static void main(String[] args) {
REPOSITORIES = args[0];
VERSION = args[1]; StringBuffer emailContent = new StringBuffer();
emailContent.append("<html> <h2 style=\"color:#FFFFFF; background: #008040;\">基本信息</h2>");
emailContent.append("<div> <b>版本库:</b> <a href=\"http://blog.csdn.net/wiker_yong\">"
+ REPOSITORIES + "</a> </div>");
emailContent.append("<div> <b>版本号:</b>" + VERSION + " </div>");
emailContent.append(" <div> <b>提交者:</b>" + getAuthor() + " </div>");
emailContent.append("<div> <b>提交时间:</b>" + getDate() + " </div>");
emailContent.append("<h2 style=\"color:#FFFFFF; background: #4682B4;\">提交说明</h2>");
emailContent.append("<font size=\"4\" color=\"#BF6000\"><xmp>" + getLog() + "</xmp></font>");
emailContent.append("<h2 style=\"color:#FFFFFF; background: #5353A8;\">文件清单</h2>");
emailContent.append("<xmp>" + getChangeList() + "</xmp> <hr>");
emailContent.append("<center> ☆ Powered by <a href=\"http://blog.csdn.net/wiker_yong\">Wiker Yong</a> </center> </html>"); MailUtils mail = new MailUtils();
mail.setSubject(emailSubject);
mail.setContent(emailContent.toString());
mail.sendMail();
} public static String getRepoName() {
return REPOSITORIES;
} public static String getAuthor() {
try {
String[] cmd = {
SVNLOOK_BIN_PATH, "author", "-r", VERSION, REPOSITORIES
};
Process proc = Runtime.getRuntime().exec(cmd);
BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String output = "";
String returnStr = "";
while ((output = stdout.readLine()) != null) { // 接受bat执行结果.有可能bat会执行不成功
System.out.println(output); // 打印exe执行的结果
returnStr += output;
}
return returnStr;
} catch (IOException e) {
e.printStackTrace();
}
return "";
} public static String getDate() {
try {
String[] cmd = {
SVNLOOK_BIN_PATH, "date", "-r", VERSION, REPOSITORIES
};
Process proc = Runtime.getRuntime().exec(cmd);
BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String output = "";
String returnStr = "";
while ((output = stdout.readLine()) != null) { // 接受bat执行结果.有可能bat会执行不成功
System.out.println(output); // 打印exe执行的结果
returnStr += output;
}
return returnStr;
} catch (IOException e) {
e.printStackTrace();
}
return "";
} public static String getLog() {
try {
String[] cmd = {
SVNLOOK_BIN_PATH, "log", "-r", VERSION, REPOSITORIES
};
Process proc = Runtime.getRuntime().exec(cmd);
BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String output = "";
String returnStr = "";
while ((output = stdout.readLine()) != null) { // 接受bat执行结果.有可能bat会执行不成功
System.out.println(output); // 打印exe执行的结果
returnStr += output;
}
return returnStr;
} catch (IOException e) {
e.printStackTrace();
}
return "";
} public static String getChangeList() {
try {
String[] cmd = {
SVNLOOK_BIN_PATH, "changed", "-r", VERSION, REPOSITORIES
};
Process proc = Runtime.getRuntime().exec(cmd);
BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String output = "";
String returnStr = "";
while ((output = stdout.readLine()) != null) { // 接受bat执行结果.有可能bat会执行不成功
System.out.println(output); // 打印exe执行的结果
returnStr += output;
}
return returnStr;
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
}

同样放在F:/Repositories/版本库名/hooks

可以测试提交一个文件。效果如下:

源代码下载地下(包含相关class和引用jar包。免积分):http://download.csdn.net/detail/yangwei19680827/6018571

Windows SVN变更发送邮件通知(JAVA实现)的更多相关文章

  1. Windows SVN变化邮件通知(Python2.7实现)

    1,新增文件post-commit.bat 内容: rem REPOS-PATH (the path to this repository) set REPOS=%1 rem REV (the num ...

  2. 基于Windows Azure 搭建基于SharePoint 2010 Intranet、Extranet、Internet (4): 配置传出邮件服务: 使用 outlook.com 发送邮件通知

    前几篇文章,已经安装了SharePoint 2010,今天将演示如何配置传出邮件.由于某些原因,企业可能没有安装自己邮件服务器,此时我们可以使用公共的邮箱服务来发送邮件通知,比如outlook.com ...

  3. windows 下用eclipse搭建java、python开发环境

    本人只针对小白!本文只针对小白!本文只针对小白! 最近闲来无事,加上之前虽没有做过eclipse上java.python的开发工作,但一直想尝试一下.于是边查找资料边试验,花了一天时间在自己的机器上用 ...

  4. Java魔法堂:以Windows服务的形式运行Java程序

    一.前言 由于防止维护人员误操作关闭Java控制台程序,因此决定将其改造为以Windows服务的形式运行.弄了一个上午总算搞定了,下面记录下来,以供日后查阅. 二.Java Service Wrapp ...

  5. SqlServer 2008 R2定时备份数据库,并且发送邮件通知

    先配置数据库的邮件设置,这样才可以发送邮件. 2. 3. 4. 5. 6. 7. 8. 9. 10. 总的预览图,如图 执行这一段(先发送备份邮件,然后进行数据备份,将昨天的发送数据插入到另一张表中, ...

  6. Linux 上使用 Gmail SMTP 服务器发送邮件通知

    导读 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息.邮件信息可能是邮件简报.状态更新(如 Cachet).监控警报(如 Monit).磁盘时间(如 RAID mdadm ...

  7. 搭建Windows SVN服务器及TortoiseSVN使用帮助和下载

    搭建Windows SVN服务器: 用的SVN服务器通常为外部,例如Google Code的服务器,不过,做为一个程序开发人员,就算自己一个人写程序,也应该有一个SVN版本控制系统,以便对开发代码进行 ...

  8. MyEclipse2015 javaweb项目从svn检出后变成java项目,clean之后不能编译,解决办法是

     javaweb项目从svn检出后变成java项目,解决办法是:1.项目右键–properties–Project Facets,勾选上Dynamic Web Module .Java 两个复选框.点 ...

  9. 通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

    通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

随机推荐

  1. QTDesigner的QVBoxLayout自动随窗口拉伸

    在MainWindow的构造函数中添加如下代码://设置Uiui.setupUi(this); //使Ui可自适应父窗口大小QVBoxLayout* mainLayout = new QVBoxLay ...

  2. linux之SQL语句简明教程---INSERT INTO

    到目前为止,我们学到了将如何把资料由表格中取出.但是这些资料是如果进入这些表格的呢? 这就是这一页 (INSERT INTO) 和下一页 (UPDATE) 要讨论的. 基本上,我们有两种作法可以将资料 ...

  3. virtual private catalog

    The following databases are registered in the base recovery catalog: PROD1, PROD2, and PROD3.The dat ...

  4. 如何以非 root 用户将应用绑定到 80 端口-ssh 篇

    有时想以普通用户身份让应用跑在80端口?? linux下1024以下端口只有root用户才能bind,那怎样才能以普通用户身份绑定到80端口呢? 参考: http://stackoverflow.co ...

  5. 学习Oracle一个星期以来的总结

    公司开发部门主要分2部分:.net开发和Oracle PL\SQL开发.刚入职的我被分到Oracle PL\SQL组了.Oracle是比SQL Server更大的数据库应用,我在学校只接触过SQL S ...

  6. 各种Adapter的用法

    同样是一个ListView,可以用不同的Adapter让它显示出来,比如说最常用的ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,以及重写BaseAdap ...

  7. 回溯算法————n皇后、素数串

    回溯就是算法是搜索算法中一种控制策略,是一个逐个试探的过程.在试探的过程中,如果遇到错误的选择,就会回到上一步继续选择下一种走法,一步一步的进行直到找到解或者证明无解为止. 如下是一个经典回溯问题n皇 ...

  8. 机器学习(Machine Learning)

    从wiki开始:http://en.wikipedia.org/wiki/Machine_learning 今天看机器学习相关的文章, 了解了一下opencv中机器学习功能比较多了 (http://d ...

  9. linux 下访问mysql

    1:先进到root:/# /usr/local/mysql/bin/2:root:/# mysql -u root -p     Enter password:

  10. mongo设计(三)

    原文:http://blog.mongodb.org/post/88473035333/6-rules-of-thumb-for-mongodb-schema-design-part-3 By Wil ...