之前有过一篇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. Android 样式

    先在Value文件夹下建一个Common.xml的文件. <style name="CodeFont" parent="@android:style/TextApp ...

  2. java 编码 UTF-8、ISO-8859-1、GBK 【转】

    Java支持UTF-8.ISO-8859-1.GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于在Java中如何正确显示中文的文章,但都不够全面,笔者特意 ...

  3. zabbix 组信息

    mysql> select * from groups; +---------+------------------+----------+-------+ | groupid | name | ...

  4. UIView添加事件

    UIView *loadView = [[UIControl alloc]initWithFrame:CGRectMake(0,0,320,480)]; loadView.backgroundColo ...

  5. C++关联容器综合应用:TextQuery小程序

    本文介绍C++关联容器综合应用:TextQuery小程序(源自C++ Primer). 关于关联容器的概念及介绍,请参考园子里这篇博文:http://www.cnblogs.com/cy568sear ...

  6. poj 1328 Radar Installation_贪心

    翻出一年多前的代码看,发现以前的代码风格很糟糕 题意:给你n个点 m为圆的半径,问需要多少个圆能把全部点圈到 #include <iostream> #include <algori ...

  7. c++崩溃错误2

    使用了内联函数: 在头文件中声明和定义内联函数是正确的 但是在头文件中声明内联函数,而在.cpp文件中定义了内联函数会导致崩溃的 .h class stu{ inline void str(): } ...

  8. 最新的手机/移动设备jQuery插件

    随着互联网的流行,移动网站开始急速增加,在2014年手机网站将会出现很多,所以手机网站是必须要学会制作的.手机网站不像桌面平台一样制作,否则会影响显示效果,目前大部分手机网站使用响应式设计技术,而且也 ...

  9. git创建分支

    1.创建本地分支名称为dev的本地分支 git branch dev 2.将本地分支添加到远程分支 git push origin dev 3.查看创建的本地分支, 带有*符号的分支,代表当前所在分支 ...

  10. JavaScript事件处理程序 学习笔记

    我一直认为Javascript的特点就是在和用户交互的过程中可以进行一些操作,那么事件作为用户交互的主要部分就显得特别重要,今天先学习了JS事件处理程序的相关内容. 首先,要明白Javascript ...