常用工具配置

开发人员之环境配置 由于系统崩溃,造成平时积累的软件工具及开发常用插件丢失,好记性不如记录下来,方便以后查阅。 Android Studio插件 `1. GsonFormat 2. ADB Idea 3. Android Develop Templates 4. Android Dialog 5. Android Drawable Importer 6. Android Drawable Viewer 7. Android Parcelable code generator 8. Android Selectors Generate 9. Android String.xml To CSV Converter 10. dash 11. Database Navigator 12. JSON TO Kotlin Class 13. Markdown Navigator 14. Parcelable Code Generator (for kotlin) 15. Generator Android Resource` sublime Text3 数据恢复 `复制 /Users/用户/Library/Application\ Support/Sublime\ Text\ 3/Local/Session.sublime_session 这个就是之前没有保存的数据,通过复制/Users/用户/Library/Application\ Support/Sublime\ Text\ 3/下面的所有内容,来恢复插件等等!!`

2019年8月26日 · 1 分钟 · 天边的星星

shell 脚本Demo

!/bin/bash Author: zhangdongling Copyright(C) Script follows here: echo “What is your name?” read PERSON echo “Hello ,$PERSON” variableName=”zhangdl” name=dong echo “variableName,$variableName” echo “name,$name” echo “1.”$0 #当前脚本的文件名 echo “2.”$1 #传递给脚本或函数的参数 echo “3.”$# #传递给脚本或函数的参数个数。 echo “4.”$* #传递给脚本或函数的所有参数。 echo “5.”@ #传递给脚本或函数的所有参数。被双引号(” “)包含时,与* 稍有不同,下面将会讲到。 echo “6.”$? #上个命令的退出状态,或函数的返回值。大部分命令执行成功会返回0,失败返回1 echo “8.”$@”” echo “9.”$*”” echo -e “pid is $$ \n” echo “pid is $$ \n” DATE=date echo -e “DATE is $DATE \n” USERS=who | wc -l echo -e “Logged in user are $USERS \n” UP=date;uptime echo -e “Uptime is $UP \n” ...

2019年7月24日 · 3 分钟 · 天边的星星

window 创建自动启动

有时候我们需要在系统自动启动的时候,把我们希望的服务也启动了,不需要我一个一个手动打开。 服务创建 使用 sc create 服务名称 binPath= “执行文件路径” start= auto displayName= “服务描述” 在window服务中 可以看到 在win+r 之后运行services.msc 查下服务,可以通过这里启动服务(对于部分没有办法做成服务的,我们可以做成批处理文件) 批处理脚本 通过创建批处理脚本,来运行我们的服务,先通过dos命令运行下写的脚本文件,看是否可以正常运行,如果可以正常运行,把脚本放到 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 中 通过组策略 Windows+R运行,输入gpedit.msc进入组策略编辑器,选中windows设置-启动,然后点击添加脚本即可,这里也可以选择用户配置中的window配置下的脚本配置 重启下试试吧!!!

2019年6月25日 · 1 分钟 · 天边的星星

HTML空格占位符

== 普通的英文半角空格 == == == no-break space (普通的英文半角空格但不换行) == 中文全角空格 (一个中文宽度) == == en空格 (半个中文宽度) == == em空格 (一个中文宽度) == 四分之一em空格 (四分之一中文宽度) 相比平时的空格( ),&nbsp拥有不间断(non-breaking)特性。即连续的&nbsp会在同一行内显示。即使有100个连续的&nbsp,浏览器也不会把它们拆成两行。 参考:https://blog.csdn.net/sforiz/article/details/43937237

2019年6月14日 · 1 分钟 · 天边的星星

Spring Boot 过滤器和拦截器总结

![请输入图片描述][1]### 拦截器与过滤器的区别 过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet api ,不需要依赖spring。 SpringMVC的机制是由DispaterServlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的. 过滤器的实现基于回调函数。而拦截器(代理模式)的实现基于反射,代理分静态代理和动态代理,动态代理是拦截器的简单实现。 ** 过滤器就是过滤的作用,在web开发中过滤一些我们指定的url 那么它能帮我们过滤什么呢? 那功能可就多了: 比如过拦截掉我们不需要的接口请求 修改请求(request)和响应(response)内容 完成CORS跨域请求等等 最简单明了的区别就是 <strong>过滤器可以修改request,而拦截器不能过滤器需要在servlet容器中实现,拦截器可以适用于javaEE,javaSE等各种环境拦截器可以调用IOC容器中的各种依赖,而过滤器不能过滤器只能在请求的前后使用,而拦截器可以详细到每个方法** 过滤器就是筛选出你要的东西,比如requeset中你要的那部分 拦截器在做安全方面用的比较多,比如终止一些流程 何时使用拦截器?何时使用过滤器? 如果是非spring项目,那么拦截器不能用,只能使用过滤器。 如果是处理controller前后,既可以使用拦截器也可以使用过滤器。 如果是处理dispaterServlet前后,只能使用过滤器。 过滤器:它依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的,是用来做一些过滤操作,获取我们想要获取的数据,比如:在Javaweb中,对传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者Controller进行业务逻辑操作。通常用的场景是:在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数(XSSFilter(自定义过滤器)),如:过滤低俗文字、危险字符等 拦截器:它依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法,比如动态代理就是拦截器的简单实现,在调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在调用方法后打印出字符串,甚至在抛出异常的时候做业务逻辑的操作。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是直接访问静态资源的请求则没办法进行拦截处理。 两者的本质区别:拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。 Spring boot使用过滤器 使用spring boot提供的FilterRegistrationBean注册Filter 使用原生servlet注解定义Filter 两种方式的本质都是一样的,都是去FilterRegistrationBean注册自定义Filter 方式一 先定义Filter ` import javax.servlet.*; import java.io.IOException; public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // do something 处理request 或response System.out.println("filter1"); // 调用filter链中的下一个filter filterChain.doFilter(servletRequest,servletResponse); //如果过滤通过,执行filterChain.doFilter(servletRequest,servletResponse); 不通过就执行直接返回 } @Override public void destroy() { } }` 注册自定义Filter `@Configuration public class FilterConfig { @Bean public FilterRegistrationBean registrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter()); filterRegistrationBean.addUrlPatterns("/*"); return filterRegistrationBean; } }` 方式二 `@Component // 定义filterName 和过滤的url @WebFilter(filterName = "my2Filter" ,urlPatterns = "/*") public class My2Filter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("filter2"); filterChain.doFilter(servletRequest,servletResponse); //如果过滤通过,执行filterChain.doFilter(servletRequest,servletResponse); 不通过就执行直接返回 } @Override public void destroy() { } }` Spring boot 拦截器的使用 定义拦截器: `public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle"); return true;////如果false,停止流程,api被拦截 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { System.out.println("afterCompletion"); } }` 配置拦截器: `@Configuration public class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()); } }` Controller演示: `@RestController public class UController { @GetMapping("/home") public String home(){ System.out.println("home"); return "myhome"; } } 输出: preHandle home postHandle afterCompletion`

2019年5月24日 · 2 分钟 · 天边的星星

Mysql日期处理

1.时间格式:在这个项目中,或许是由不同的人建立的数据库表结构吧,对时间的格式步统一,有的表中存储的long类型的时间戳,有的表中是存储的日期,有的表中存储的是时间,同时格式有20171225,2017-12-25等,一点都不统一。这样做,会对项目增加一些额外的工作量,同时会衍生出一些问题出来。比如,在写后台代码时,需要对时间做出处理,以适应数据库的时间格式;在进行夺标联合查询时,时间格式不统一,又会对sql语句进行时间格式转换,造成sql语句臃肿的情况。所以,在同一个项目中,时间格式应该保持统一。个人觉得long 类型的时间戳,以及String类型的yyyy-MM-dd HH:mm:ss 这两种方式时比较不错的。 long类型的时间戳,是因为后台java代码将date类型的时间转化为时间戳很容易。 String类型时因为,我们假如经常使用时间这个字段,在应用时不需要额外将Date类型转化为String类型,使用起来比较直观,方便。 2.常用时间语句 SELECT CURDATE():2017-12-25 //此时日期 SELECT NOW() : 2017-12-25 22:20:21 //此刻时间 SELECT YEAR(‘2017-12-25 22:27:45’): 2017 //获取时间的年份 SELECT MONTH(‘2017-12-25 22:27:45’): 12 //获取时间的月份 SELECT DAY(‘2017-12-25 22:27:45’):25 //获取时间的天数 SELECT HOUR(‘2017-12-25 22:27:45’):22 //获取时间的小时 SELECT MINUTE(‘2017-12-25 22:27:45’):27 //获取时间的分钟 SELECT SECOND(‘2017-12-25 22:27:45’):45 //获取时间的秒数 SELECT DATE_SUB(NOW(),INTERVAL 1 YEAR) //在目前的时间减去一年,该语句可以进行多种操作,指定时间下减去x年:DATE_SUB(“2017-12-25”,INTERVAL x YEAR),同时可以减去 x month/day/hour/minute/second等 SELECT ** DATE_ADD**(NOW(),INTERVAL 1 YEAR) //同上,在目前的时间上加上一年 SELECT CONCAT(‘2017′,’-12-12′):2017-12-12 //组装字符串,可以组装成任何时间格式,也可以使用如上语句,例如:SELECT CONCAT(YEAR(NOW()),’-12-12′) :2017-12-12 ; SELECT UNIX_TIMESTAMP(‘2017-12-25’):1514131200 //字符串转换成时间戳 SELECT FROM_UNIXTIME(1514131200) :2017-12-25 00:00:00 //时间戳转化为时间 ...

2019年5月9日 · 5 分钟 · 天边的星星

生成Kindle可读的mobi和PDF电子书

购买kindle之后,自然欣喜万分,不来自于工具本身,而来自于发现自己能够静下心来阅读长篇和复杂的文字了,可喜可贺。更重要的是,kindle减轻了我眼睛的莫大的压力。但马上就出现几个问题: 不是所有的电子书都有kindle,最常见的是扫描PDF 大量的论文无法阅读,这和上面的问题一致 网络上很多精彩的博客,新闻,都是没法阅读的 可能有人说,用手机看不就得了?用手机看花边娱乐新闻当然很好,可是当看数学推导时,推送栏上面妹子发来的消息,会直接把你的思路全部打乱。没用过kindle的人,是有些难以体会那种接近于纸张的质感的。OK,既然是程序员,我们就尝试解决这些问题。 有关kindlegen和HTML kindlegen是亚马逊官方出品的一个电子书生成工具。但它明显就没打算让普通用户使用,命令行界面,几乎没有任何像样的文档。只是在实例样例里给了几个生成电子书的文件。我就因为没有文档兜了大弯,翻遍国外各大网站,才慢慢摸清kindlegen的使用细节。 可以这么理解,KG是将一组HTML和相关文件,打包成mobi文件的工具。 最简单的例子,随意编写一个HTML文件,送给KG,会生成对应的mobi。基本有title,h1,h2,正文,kindle渲染就差不多了。如果需要修改样式,可以提供CSS文件。 但是,这样的做法,没有图片,没有超链接,无法提供目录,如果输入单一的大型HTML文件,kindle的渲染性能就不足了。 因此,需要生成层级化,多文件形式的html文件夹,然而kg并不能直接识别html文件夹,还是需要一些元数据描述。 编写元数据文件 要想解决这个问题,就需要编写两个文件,opf和ncx, 他们可以理解为KG的makefile, KG通过这两个文件索引HTML,目录和其他多媒体资源。介绍如下: [][1] 值得注意的是,所有的文件都应该保存在本地,尤其是jpg, html中的图片超链接,需要重定向到本地的jpg文件,如果依然在服务器上,据我所知,kg是不负责渲染下载的。 资源聚合文件: opf和ncx 由于opf文件非常重要,我们下面就讲解opf的格式: ![复制代码](https://common.cnblogs.com/images/copycode.gif) <metadata xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:opf=&quot;http://www.idpf.org/2007/opf&quot;> <dc:title>电子书标题</dc:title> <dc:language>en-us</dc:language> </metadata> <manifest> <!-- table of contents [mandatory] --> <item id=&quot;tochtml&quot; media-type=&quot;application/xhtml+xml&quot; href=&quot;toc.html&quot;/> <item id=&quot;item0&quot; media-type=&quot;application/xhtml+xml&quot; href=&quot;Artical-1277621753.html&quot;/> ... <!--下面是图片--> <item id=&quot;0.368541311142&quot; media-type=&quot;image/jpg&quot; href=&quot;Images/-1720404282.jpg&quot;/> </manifest> <spine toc=&quot;desertfire&quot;> <!-- 下面描述了KG生成电子书后文本的顺序 --> <itemref idref=&quot;toc&quot;/> <itemref idref=&quot;tochtml&quot;/> <itemref idref=&quot;item31&quot;/> </spine> <guide> <reference type=&quot;toc&quot; title=&quot;Table of Contents&quot; href=&quot;toc.html&quot;></reference> <reference type=&quot;text&quot; title=&quot;Welcome&quot; href=&quot;toc.html&quot;></reference> </guide> </package> &#96;&#96;&#96;" data-snippet-id="ext.b091e89925c72be7b07f9caa16092df4" data-snippet-saved="false" data-codota-status="done">&lt;package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="BookId"&gt; &lt;metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf"&gt; &lt;dc:title&gt;电子书标题&lt;/dc:title&gt; &lt;dc:language&gt;en-us&lt;/dc:language&gt; &lt;/metadata&gt; &lt;manifest&gt; &lt;!-- table of contents [mandatory] --&gt; &lt;item id="tochtml" media-type="application/xhtml+xml" href="toc.html"/&gt; &lt;item id="item0" media-type="application/xhtml+xml" href="Artical-1277621753.html"/&gt; ... &lt;!--下面是图片--&gt; &lt;item id="0.368541311142" media-type="image/jpg" href="Images/-1720404282.jpg"/&gt; &lt;/manifest&gt; &lt;spine toc="desertfire"&gt; &lt;!-- 下面描述了KG生成电子书后文本的顺序 --&gt; &lt;itemref idref="toc"/&gt; &lt;itemref idref="tochtml"/&gt; &lt;itemref idref="item31"/&gt; &lt;/spine&gt; &lt;guide&gt; &lt;reference type="toc" title="Table of Contents" href="toc.html"&gt;&lt;/reference&gt; &lt;reference type="text" title="Welcome" href="toc.html"&gt;&lt;/reference&gt; &lt;/guide&gt; &lt;/package&gt; <div class="cnblogs_code_toolbar"> <span class="cnblogs_code_copy"><a title="复制代码">![复制代码](https://common.cnblogs.com/images/copycode.gif)</a></span> </div> </div> [![image](https://images2015.cnblogs.com/blog/287060/201603/287060-20160307103012038-1762823801.png)][2] 需要注意的有以下几点: * 所有资源都需要一个id,命名任意,但不能重复 * media-type描述了资源的类型,记住两类基本就够用了,&#8221;application/xhtml+xml&#8221;代表HTML文件,&#8221;image/jpg&#8221;或 &#8220;image/png&#8221;代表图片。 * 其他都可以省略,只是会影响电子书完整性。 由于这两个文件内部其实都是html,所以修改编辑都很容易。 **最终,KG的命令行目标,不是目录HTML,而是OPF文件!**将所有的文件放入一个文件夹后,启动KG命令行,最后KG会在该目录下生成你心仪已久的mobi! ## 编辑HTML和OPF文件 知道其原理后,主要的任务是填充HTML和OPF文件,几页内容还好,如果内容繁多,不论是手工**( ⊙ o ⊙ )**,还是编程字符串拼接,都会变得异常低效。 此时,就需要**模板引擎**出手了,python推荐使用Jinja2, 资料众多,功能强大,性能尚可。生成opf的模板文件,基本就长下面这个样子: <div class="cnblogs_code"> <div class="cnblogs_code_toolbar"> <span class="cnblogs_code_copy"><a title="复制代码">![复制代码](https://common.cnblogs.com/images/copycode.gif)</a></span> </div> <div class="top-box hide"> <div class="alert-info"> </div> </div> {{ title }} en-us {% for item in navigation %} {% endfor %} {% for item in media %} {% endfor %} {% for item in navigation %} {% endfor %} " data-snippet-id="ext.1564f86c79babcc6b8778ebad334ce3f" data-snippet-saved="false" data-codota-status="done"><package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="BookId"> <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf"> <dc:title>{{ title }}</dc:title> <dc:language>en-us</dc:language> </metadata> <manifest> <!-- table of contents [mandatory] --> <item id="toc" media-type="application/x-dtbncx+xml" href="toc.ncx"/> <item id="tochtml" media-type="application/xhtml+xml" href="toc.html"/> {% for item in navigation %} <item id="{{ item.id }}" media-type="application/xhtml+xml" href="{{ item.href }}"/> {% endfor %} {% for item in media %} <item id="{{ item.id }}" media-type="image/{{ item.format}}" href="{{ item.href}}"/> {% endfor %} </manifest> <spine toc="{{ title }}"> <!– the spine defines the linear reading order of the book –> <itemref idref=“toc”/> <itemref idref=“tochtml”/> {% for item in navigation %} <itemref idref="{{ item.id }}"/> {% endfor %} </spine> <guide> <reference type=“toc” title=“Table of Contents” href=“toc.html”></reference> <reference type=“text” title=“Welcome” href=“toc.html”></reference> </guide> </package> ...

2019年4月23日 · 4 分钟 · 天边的星星

Idea工具常用技巧总结

### 1.无处不在的跳转 注:这里的快捷键是自己定义的,并非大家的都一样,可以通过findAction查找相应的快捷键。 菜单栏选择”帮助/help”→FindAction(ctrl+shift+A)快速搜索想要查找命令。 我这里只演示windows平台使用的快捷键(eclipse版本KeyMap)。 1.1 项目窗口间的跳转 - 菜单栏选择window →Previous Project Window(ctrl+alt+左方括号) 1.2 文件之间的跳转 - 查看近期浏览文件 findaction(ctrl+shift+A) →输入recent files - Ctrl+E - 查看近期改动文件 recent changed files ⇔ ctrl+shift+e - 修改位置跳转 - 菜单栏&#8221;Navigate&#8221;→last edit location(ctrl+Q) - 反之 next edit location 可以自定义快捷键。 - 浏览位置跳转(光标停留位置) navigate →back(alt+向左箭头) 1.3 项目区与代码编辑区的相应跳转 - 项目区跳到右边代码编辑区 - 按ESC键 - 代码编辑区跳到左边项目区 - Alt+数字1 1.4 书签之间的跳转 - 利用书签跳转 - findaction→bookmarks→toggle bookmark(ctrl+shift+F11) - 带标记书签 bookmarks→toggle bookmarks with Mnemonic(ctrl+alt+shift+F11) - 标签间跳转 用ctrl+作标记的数字(这里有个坑我按小键盘数字没反应,得按大键盘的数字才行) 1.5 收藏夹 - 查看收藏夹 findaction→favorites(alt+2) - 可以看到我们的书签、收藏夹。 - 单独添加到收藏夹(自定义收藏夹) - findaction → add to favorites(Alt+shift+F) - 我们可以光标定位到某个函数、或是某个类添加到自定义的收藏夹中(add to new favorites list) 1.6 插件 - 调插件页面 findaction→输入plugins - 1.神器 emacsIdeas 安装 - browse repositories →emacIdeas→install→restart idea(重启Idea) - 配置emacsIdeas快捷键 settings/keymap/emacIdeas文件夹下AceJumpWord添加对应的快捷键。 - 按下刚配置的快捷键比如我这里shift+alt+K →按下要找的数字→输入任意高亮位置就跳转到对应位置了。 1.7 编辑区分屏 - 垂直分屏 - IntelliJ IDEA 支持对代码进行垂直或是水平分组,在打开的文件Tab上打开鼠标右键菜单,选择对应的split vertically功能即可 - 水平分屏 - 设为split horizontally即可。 1.8 代码格式化★ - 部分代码格式化 - 选中要格式化代码 ctrl+shift+F - 全部 - 直接ctrl+shift+F 2.高速定位代码 2.1 精准搜索 - 类 - 菜单栏 →Navigate →Class(Ctrl+shift+T) 其中include none..勾上就可以关联到Jar包里所依赖的类。 - 文件 - 菜单栏 navigate →file(ctrl+shift+r) - 符号 - 菜单栏 navigate →symbol(ctrl+alt+shift+n) - 字符串 - 菜单栏 edit→find→find in path(ctrl+H) 3.代码小助手 3.1 列操作 - 移动到当前单词尾部 - findaction →输入move caret to next word(ctrl+向右箭头) - 选中到当前单词尾部 (ctrl+shift+向右箭头) - 当前单词设置大小写切换 - edit→toggle case(ctrl+shift+u) - 移动到当前行首 - findaction→输入move caret to line start(Home键) - 移动到当前行尾 - findaction→输入move caret to line end(End键) - 将当前行的操作应用到相似行进行批量操作★ - 菜单栏edit→find→select all occurrences(ctrl+alt+Y) - 格式化下代码 - 菜单栏code→reformat code 3.2 live Template★ - main - findaction→输入live templates→点击右上角“+” - 输入缩写main 简介public static void main - 输入方法体 <div class="top-box hide"> <div class="alert-info"> </div> </div> ``` &lt;span class="hljs-function">&lt;span class="hljs-keyword">public&lt;/span> &lt;span class="hljs-keyword">static&lt;/span> &lt;span class="hljs-keyword">void&lt;/span> &lt;span class="hljs-title">main&lt;/span>&lt;span class="hljs-params">(String[] args)&lt;/span>&lt;/span>{ &lt;span class="katex math inline">END&lt;/span> } ...

2019年3月27日 · 3 分钟 · 天边的星星

利用mvn deploy命令上传包 到私服

利用mvn deploy命令上传包 mvn安装 apache官方网站可以下载。 https://maven.apache.org/download.cgi 在PATH里加入maven的bin的路径 配置完毕后,在Windows命令提示符下,输入mvn -v测试一下。是否安装成功。 mvn:deploy在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。 以将ojdbc14传到nexus中的releases为例 一 配置settings.xml 因为nexus是需要登陆操作,当然可以通过配置免登陆,这是后话。 在settings.xml的 releases deployment 123456 snapshots deployment 123456 当然如果你要上传包去其他仓库,可依照此例设置相应的参数,如 central admin admin123 如果进行deploy时返回Return code is: 401错误,则需要进行用户验证或者你已经验证的信息有误。 如果进行deploy时返回Return code is: 400, ReasonPhrase: Bad Request错误,这里的原因是往往是没有部署到nexus的仓库中切换Durl路径 二 cmd输入命令 最好进入到jar包的绝对路径 mvn deploy:deploy-file -DgroupId=zhongjin -DartifactId=API4BDS -Dversion=2.3 -Dpackaging=jar -Dfile=G:\p2p\API4BDS-2.3.jar -Durl=http://192.168.34.35:81/nexus/content/repositories/releases -DrepositoryId=releases DgroupId和DartifactId构成了该jar包在pom.xml的坐标,项目就是依靠这两个属性定位。自己起名字也行。 Dfile表示需要上传的jar包的绝对路径。 Durl私服上仓库的位置,打开nexus——>repositories菜单,可以看到该路径。 DrepositoryId服务器的表示id,在nexus的configuration可以看到。 Dversion表示版本信息,怎样得到一个jar包准确的版本呢? 解压该包,会发现一个叫MANIFEST.MF的文件,这个文件就有描述该包的版本信息。 比如Manifest-Version: 1.0可以知道该包的版本了。 上传成功后,在nexus界面点击3rd party仓库可以看到这包。 今天deploy项目时,maven报错401,百度了一下,找到以下文章,解决了问题,所以就考了过来。 源地址是:http://www.netingcn.com/maven-deploy-nexus.html 首先在Nexus中创建一个自己私有的仓库,步骤为Repositories –> Add –> Hosted Repository,在页面的下半部分输入框中填入Repository ID和Repository Name即可,比如分别填入myrepo和 my repository,点击save就创建完成了。 ...

2019年1月9日 · 1 分钟 · 天边的星星

Mac安装mysql 8.0.13步骤

下载Mysql 下载地址 <span class="md-link" spellcheck="false">[https://dev.mysql.com/downloads/mysql/](https://dev.mysql.com/downloads/mysql/)</span> 选择tar压缩文件 配置环境 解压文件放到你希望的目录中 配置环境变量 例如: vi ~/.bash_profile export PATH=$PATH:/usr/local/mysql/bin 使其生效:source ~/.bash_profile 初始化mysql mysql 8.0 执行 scripts 目录下的 mysql_install_db 脚本完成一些默认的初始化(创建默认配置文件、授权表等) cd /usr/local/mysql sudo scripts/mysql_install_db <span class="md-image md-img-loaded" contenteditable="false" data-src="https://ws2.sinaimg.cn/large/006tNbRwly1fx9xmzyphej31m6074jti.jpg">![](https://ws2.sinaimg.cn/large/006tNbRwly1fx9xmzyphej31m6074jti.jpg)</span> <span class="">为了快速启动和停止mysql 我配置了别名</span> <span class="md-image md-img-loaded" contenteditable="false" data-src="https://ws4.sinaimg.cn/large/006tNbRwly1fx9xkpfh6oj30x603wwfa.jpg">![](https://ws4.sinaimg.cn/large/006tNbRwly1fx9xkpfh6oj30x603wwfa.jpg)</span> <span class="">检测mysql的status 执行mysqlstatus</span> <span class="">启动mysql 执行 </span> 出现这个错误 ...

2018年11月16日 · 1 分钟 · 天边的星星