社区编辑申请
注册/登录
Java同步文件到Jboss虚拟目录
开发 后端
使用Maven开发的,有一个问题大家肯定是深恶痛绝。 “每一次开发完成,都需要maven打包部署”比如某公司自己在maven上开发了插件,其中包含了自定义逻辑,那么其部署每一次都必须package一把,开发效率极其低下。使用同步工具,差点让我吐血,想想还是算了,自己写个同步的程序.

使用Maven开发的,有一个问题大家肯定是深恶痛绝。

“每一次开发完成,都需要maven打包部署”

比如某公司自己在maven上开发了插件,其中包含了自定义逻辑,那么其部署每一次都必须package一把,开发效率极其低下。使用同步工具,差点让我吐血,想想还是算了,自己写个同步的程序.
 

  1. package com.ycl.filter.FileCleaner;  
  2.  
  3. import java.io.File;  
  4. import java.io.FileFilter;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileReader;  
  7. import java.io.FileWriter;  
  8. import java.io.IOException;  
  9. import java.io.Reader;  
  10. import java.io.Writer;  
  11. import java.util.HashMap;  
  12. import java.util.Map;  
  13.  
  14. import org.apache.commons.io.IOUtils;  
  15.  
  16. public class FileSyn {  
  17.  
  18.     static Map<String, String> map = new HashMap<String, String>();  
  19.  
  20.     /**  
  21.      * 同步一个源文件目录到目标文件目录  
  22.      *              默认去.svn不进行同步  
  23.      * @param target  
  24.      * @param source  
  25.      * @param fileName  
  26.      */ 
  27.     public static void synFile(String target, String source) {  
  28.         File sourcePath = new File(source);  
  29.         File targetPath = new File(target);  
  30.         index(sourcePath);  
  31.         synPath(sourcePath, targetPath,new FileFilter(){  
  32.             @Override 
  33.             public boolean accept(File file) {  
  34.                 if(file.getAbsolutePath().contains(".svn")){  
  35.                     return false;  
  36.                 }  
  37.                 return true;  
  38.             }  
  39.  
  40.         });  
  41.     }  
  42.  
  43.     /**  
  44.      * 同步一个源文件目录到目标文件目录  
  45.      *  
  46.      * @param target  
  47.      * @param source  
  48.      * @param fileName  
  49.      */ 
  50.     public static void synFile(String target, String source,FileFilter fileFilter) {  
  51.         File sourcePath = new File(source);  
  52.         File targetPath = new File(target);  
  53.         index(sourcePath);  
  54.         synPath(sourcePath, targetPath,fileFilter);  
  55.     }  
  56.  
  57.     /**  
  58.      * 同步两目录下的文件  
  59.      *                 过滤.svn文件夹下的不需要同步  
  60.      * @param sourcePath  
  61.      * @param targetPath  
  62.      */ 
  63.     public static void synPath(File sourcePath, File targetPath,FileFilter fileFilter) {  
  64.  
  65.             if (sourcePath.isDirectory()) {  
  66.                 File[] files = sourcePath.listFiles(fileFilter);  
  67.                 for (File sourceFile : files) {  
  68.                     try {  
  69.                         if (sourceFile.isDirectory()) {  
  70.                             File targetFile = new File(targetPath, sourceFile  
  71.                                     .getName());  
  72.                             if (!targetFile.exists()) {// 目录不存在会自动创建  
  73.                                 targetFile.createNewFile();  
  74.                             }  
  75.                             synPath(sourceFile, targetFile,fileFilter);  
  76.                         } else if (sourceFile.isFile()) {  
  77.                             File targetFile = new File(targetPath, sourceFile  
  78.                                     .getName());  
  79.                             if (!targetFile.exists()) {// 文件不存在会自动创建  
  80.                                 targetFile.createNewFile();  
  81.                             }  
  82.                             boolean flag = synFile(sourceFile, targetFile);  
  83.                             if (flag) {  
  84.                                 System.out.println("同步文件:[" 
  85.                                         + sourceFile.getAbsolutePath() + "," 
  86.                                         + targetFile.getAbsolutePath() + "]成功!");  
  87.                             }  
  88.                         }  
  89.                     } catch (IOException e) {  
  90.                         System.out.println("源文件:"+sourceFile.getAbsolutePath());  
  91.                         e.printStackTrace();  
  92.                     }  
  93.                 }  
  94.             }  
  95.  
  96.     }  
  97.  
  98.     /**  
  99.      * 同步一个源文件目录到目标文件目录 指定某个文件名. 用源文件覆盖目录文件.[当源文件比目录文件新的时候].  
  100.      *  
  101.      * @param target  
  102.      * @param source  
  103.      * @param fileName  
  104.      */ 
  105.     public static boolean synFile(File sourceFile, File targetFile) {  
  106.         boolean flag = false;  
  107.         Reader reader = null;  
  108.         Writer writer = null;  
  109.         try {  
  110.             if(sourceFile.getAbsolutePath().contains("AddRole")){  
  111.             System.out.println("source最后修改时间:"+sourceFile.lastModified());  
  112.             System.out.println("target最后修改时间:"+targetFile.lastModified());  
  113.             }  
  114.             if (sourceFile.lastModified() > targetFile.lastModified()) {  
  115.                 reader = new FileReader(sourceFile);  
  116.                 writer = new FileWriter(targetFile);  
  117.                 IOUtils.copy(reader, writer);  
  118.                 flag = true;  
  119.             }  
  120.         } catch (FileNotFoundException e) {  
  121.             e.printStackTrace();  
  122.             flag = false;  
  123.         } catch (IOException e) {  
  124.             e.printStackTrace();  
  125.             flag = false;  
  126.         } finally {  
  127.             try {  
  128.                 if (reader != null) {  
  129.                     reader.close();  
  130.                 }  
  131.                 if (writer != null) {  
  132.                     writer.close();  
  133.                 }  
  134.             } catch (IOException e) {  
  135.                 // TODO Auto-generated catch block  
  136.                 e.printStackTrace();  
  137.             }  
  138.         }  
  139.         return flag;  
  140.     }  
  141.  
  142.     /**  
  143.      * 创建目录索引 fileName ==> filePath  
  144.      *  
  145.      * @param sourcePath  
  146.      */ 
  147.     private static void index(File sourcePath) {  
  148.         if (sourcePath.isDirectory()) {  
  149.             File[] files = sourcePath.listFiles();  
  150.             for (File file : files) {  
  151.                 if (file.isDirectory()) {  
  152.                     // map.put(file.h, file.get)  
  153.                 }  
  154.             }  
  155.         }  
  156.     }  

这里本来想做索引的,后来想想就算了,同步整个目录得了,因为程序的速度太快了,我就不浪费程序代码了,代码多了本身就会崩溃。

测试代码如下:
 

  1. package com.ycl.filter.FileCleaner;  
  2.  
  3. import java.io.File;  
  4. import java.io.FileFilter;  
  5.  
  6. /**  
  7.  * 这个同步挺管用的,不需要重启服务.不需要copy文件  
  8.  * @author yangchunlong.tw  
  9.  *  
  10.  */ 
  11. public class TestFileSyn {  
  12.  
  13.     /**  
  14.      * @param args  
  15.      */ 
  16.     public static void main(String[] args) {  
  17.         // TODO Auto-generated method stub  
  18.         //synConfigFile();1308563280000  
  19.         synClassFile();  
  20.     }  
  21.  
  22.     /**  
  23.      * 同步配置文件  
  24.      * @param target  
  25.      * @param source  
  26.      */ 
  27.     public static void synConfigFile(){  
  28.         String source = "D:\\workspace\\branches\\sportalModule\\sportal-web\\src\\main\\webapp\\web";  
  29.         String target = "D:\\workspace\\branches\\sportalModule\\target\\sportal.war\\web";  
  30.         FileSyn.synFile(target, source);  
  31.     }  
  32.  
  33.     /**  
  34.      * 同步class文件,只同步class文件 这里的规则和同步配置文件一致,就是同步.  
  35.      * 设置同步的目录,以source为基本同步target目录文件  
  36.      */ 
  37.     public static void synClassFile(){  
  38.         String source = "D:\\workspace\\branches\\sportalModule\\sportal-web\\target\\classes";  
  39.         String target = "D:\\workspace\\branches\\sportalModule\\target\\sportal.war\\WEB-INF\\classes";  
  40.         FileSyn.synFile(target, source);  
  41.     }  
  42.  

你可以测试修改配置文件,或者Java文件,借助eclipse的auto编译功能,可以copy 文件[class,xml...]到指定的目录,不需要重新maven打包部署,如果服务器支持动态加载,则不需要重启。

同步的测试结果代码如下:
 

  1. 同步文件:[D:\workspace\branches\sportalModule\sportal-web\target\classes\sql-map.xml,D:\workspace\branches\sportalModule\target\sportal.war\WEB-INF\classes\sql-map.xml]成功! 

很清楚的表示,你修改的文件已经同步到目录目录了.

原文链接:http://a123159521.iteye.com/blog/1099233

【编辑推荐】

  1. JBoss的两种类隔离机制配置说明
责任编辑:艾婧 来源: ITEYE
相关推荐

2022-06-05 21:09:47

Python办公自动化

2022-06-01 11:14:42

Java代码技巧

2022-06-27 09:54:38

编程语言JavaC++

2022-05-31 10:30:16

元宇宙数字人高清渲染

2022-06-13 12:43:13

Java模块

2022-05-31 07:40:44

LsyncdCentOS7

2022-06-20 08:58:25

Obsidian笔记工具

2022-06-27 23:44:37

云原生云存储云计算

2022-06-22 08:02:11

2022-04-23 17:49:05

区块链元宇宙MetaCon

2022-06-23 11:42:22

MySQL数据库

2022-06-15 10:30:07

数据中心5G蜂窝网络

2022-06-21 09:02:49

python技巧

2022-06-22 05:53:49

城域网广域网VXLAN

2022-06-16 14:07:26

Java代码代码review

2022-06-26 09:55:00

接口自动化项目

2022-04-02 20:45:04

Hi3516开发板操作系统鸿蒙

2022-06-10 13:56:42

Java

2022-06-16 11:33:57

物联网区块链科技

2022-04-30 09:09:55

SecureFXSecureCRT

同话题下的热门内容

源码探秘:Python 中对象是如何被调用的?吐血推荐17个提升开发效率的“轮子”超全!Python 中常见的配置文件写法Pandas 新手容易犯的六个错误Python 中的万能之王 Lambda 函数整理了100个Python精选库,建议收藏!Python进行数据可视化,你会用什么库来做呢?Spring MVC中@InitBinder注解是如何应用的?

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号