﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-miaoyachun-随笔分类-Java</title><link>http://www.blogjava.net/miaoyachun/category/50699.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 08 Dec 2017 06:50:38 GMT</lastBuildDate><pubDate>Fri, 08 Dec 2017 06:50:38 GMT</pubDate><ttl>60</ttl><item><title>Spring boot外部配置-配置中心化</title><link>http://www.blogjava.net/miaoyachun/archive/2017/12/08/432940.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Fri, 08 Dec 2017 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2017/12/08/432940.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/432940.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2017/12/08/432940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/432940.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/432940.html</trackback:ping><description><![CDATA[在Spring cloud config出来之前, 自己实现了基于ZK的配置中心, 杜绝了本地properties配置文件, 原理很简单, 只是重载了PropertyPlaceholderConfigurer的mergeProperties():<br /><br /><div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:10.5pt;"><span style="color:#629755;font-style:italic;">/**<br /></span><span style="color:#629755;font-style:italic;"> * 重载合并属性实现<br /></span><span style="color:#629755;font-style:italic;"> * 先加载file properties， 然后并入ZK配置中心读取的properties<br /></span><span style="color:#629755;font-style:italic;"> *<br /></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@return </span><span style="color:#629755;font-style:italic;">合并后的属性集合<br /></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@throws </span><span style="color:#629755;font-style:italic;">IOException 异常<br /></span><span style="color:#629755;font-style:italic;"> */<br /></span><span style="color:#bbb529;">@Override<br /></span><span style="color:#cc7832;">protected </span>Properties <span style="color:#ffc66d;">mergeProperties</span>() <span style="color:#cc7832;">throws </span>IOException {<br />    Properties result = <span style="color:#cc7832;">new </span>Properties()<span style="color:#cc7832;">;<br /></span> <span style="color:#808080;">   // 加载父类的配置<br /></span>    Properties mergeProperties = <span style="color:#cc7832;">super</span>.mergeProperties()<span style="color:#cc7832;">;<br /></span>    result.putAll(mergeProperties)<span style="color:#cc7832;">;<br /></span> <span style="color:#808080;">   // 加载从zk中读取到的配置<br /></span>    Map&lt;String<span style="color:#cc7832;">, </span>String&gt; configs = loadZkConfigs()<span style="color:#cc7832;">;<br /></span>    result.putAll(configs)<span style="color:#cc7832;">;<br /></span><span style="color:#cc7832;">    return </span>result<span style="color:#cc7832;">;<br /></span>}</pre></div><br />这个实现在spring项目里用起来还是挺顺手的, 但是近期部分spring-boot项目里发现这种placeholder的实现跟spring boot的@ConfigurationProperties(prefix = "xxx") 不能很好的配合工作,<br />也就是属性没有被resolve处理, 用@Value的方式确可以读到, 但是@Value配置起来如果属性多的话还是挺繁琐的, 还是倾向用@ConfigurationProperties的prefix, 于是看了下spring boot的文档发现<code>PropertySource</code> order:<div></div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp; * Devtools&nbsp;global&nbsp;settings&nbsp;properties&nbsp;on&nbsp;your&nbsp;home&nbsp;directory&nbsp;(~/.spring-boot-devtools.properties&nbsp;when&nbsp;devtools&nbsp;is&nbsp;active).<br />&nbsp;&nbsp; * @TestPropertySource&nbsp;annotations&nbsp;on&nbsp;your&nbsp;tests.<br />&nbsp;&nbsp; * @SpringBootTest#properties&nbsp;annotation&nbsp;attribute&nbsp;on&nbsp;your&nbsp;tests.<br />&nbsp;&nbsp; * Command&nbsp;line&nbsp;arguments.<br />&nbsp;&nbsp; * Properties&nbsp;from&nbsp;SPRING_APPLICATION_JSON&nbsp;(inline&nbsp;JSON&nbsp;embedded&nbsp;in&nbsp;an&nbsp;environment&nbsp;variable&nbsp;or&nbsp;system&nbsp;property)<br />&nbsp;&nbsp; * ServletConfig&nbsp;init&nbsp;parameters.<br />&nbsp;&nbsp; * ServletContext&nbsp;init&nbsp;parameters.<br />&nbsp;&nbsp; * JNDI&nbsp;attributes&nbsp;from&nbsp;java:comp/env.<br />&nbsp;&nbsp; * Java&nbsp;System&nbsp;properties&nbsp;(System.getProperties()).<br />&nbsp;&nbsp; * OS&nbsp;environment&nbsp;variables.<br />&nbsp;&nbsp; * A&nbsp;RandomValuePropertySource&nbsp;that&nbsp;only&nbsp;has&nbsp;properties&nbsp;in&nbsp;random.*.<br />&nbsp;&nbsp; * Profile-specific&nbsp;application&nbsp;properties&nbsp;outside&nbsp;of&nbsp;your&nbsp;packaged&nbsp;jar&nbsp;(application-{profile}.properties&nbsp;and&nbsp;YAML&nbsp;variants)<br />&nbsp;&nbsp; * Profile-specific&nbsp;application&nbsp;properties&nbsp;packaged&nbsp;inside&nbsp;your&nbsp;jar&nbsp;(application-{profile}.properties&nbsp;and&nbsp;YAML&nbsp;variants)<br />&nbsp;&nbsp; * Application&nbsp;properties&nbsp;outside&nbsp;of&nbsp;your&nbsp;packaged&nbsp;jar&nbsp;(application.properties&nbsp;and&nbsp;YAML&nbsp;variants).<br />&nbsp;&nbsp; * Application&nbsp;properties&nbsp;packaged&nbsp;inside&nbsp;your&nbsp;jar&nbsp;(application.properties&nbsp;and&nbsp;YAML&nbsp;variants).<br />&nbsp;&nbsp; * @PropertySource&nbsp;annotations&nbsp;on&nbsp;your&nbsp;@Configuration&nbsp;classes.<br />&nbsp;&nbsp; * Default&nbsp;properties&nbsp;(specified&nbsp;using&nbsp;SpringApplication.setDefaultProperties).</span></div></div><div></div>不难发现其会检查Java system propeties里的属性, 也就是说, 只要把mergerProperties读到的属性写入Java system props里即可, 看了下源码, 找到个切入点<br /><br /><div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:10.5pt;"><span style="color:#629755;font-style:italic;">/**<br /></span><span style="color:#629755;font-style:italic;"> * 重载处理属性实现<br /></span><span style="color:#629755;font-style:italic;"> * 根据选项, 决定是否将合并后的props写入系统属性, Spring boot需要<br /></span><span style="color:#629755;font-style:italic;"> *<br /></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@param </span><span style="color:#8a653b;font-style:italic;">beanFactoryToProcess<br /></span> <span style="color:#629755;font-style:italic;">* </span><span style="color:#629755;font-weight:bold;font-style:italic;">@param </span><span style="color:#8a653b;font-style:italic;">props                </span><span style="color:#629755;font-style:italic;">合并后的属性<br /></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@throws </span><span style="color:#629755;font-style:italic;">BeansException<br /></span><span style="color:#629755;font-style:italic;"> */<br /></span><span style="color:#bbb529;">@Override<br /></span><span style="color:#cc7832;">protected void </span><span style="color:#ffc66d;">processProperties</span>(ConfigurableListableBeanFactory beanFactoryToProcess<span style="color:#cc7832;">, </span>Properties props) <span style="color:#cc7832;">throws </span>BeansException {<br />    <span style="color:#808080;">// 原有逻辑<br /></span>     <span style="color:#cc7832;">super</span>.processProperties(beanFactoryToProcess<span style="color:#cc7832;">, </span>props)<span style="color:#cc7832;">;<br /></span> <span style="color:#808080;">   // 写入到系统属性<br /></span> <span style="color:#cc7832;">   if </span>(<span style="color:#9876aa;">writePropsToSystem</span>) {<br />       <span style="color:#808080;">// write all properties to system for spring boot<br /></span>        Enumeration&lt;?&gt; propertyNames = props.propertyNames()<span style="color:#cc7832;">;<br /></span><span style="color:#cc7832;">        while </span>(propertyNames.hasMoreElements()) {<br />             String propertyName = (String) propertyNames.nextElement()<span style="color:#cc7832;">;<br /></span>             String propertyValue = props.getProperty(propertyName)<span style="color:#cc7832;">;<br /></span>             System.<span style="font-style:italic;">setProperty</span>(propertyName<span style="color:#cc7832;">, </span>propertyValue)<span style="color:#cc7832;">;<br /></span>        }<br />    }<br />}</pre></div>为避免影响过大, 设置了个开关, 是否写入系统属性, 如果是spring boot的项目, 就开启, 这样对线上非spring boot项目做到影响最小, 然后spring boot的@ConfigurationProperties完美读到属性;<br /><br />具体代码见: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor<br /><br /><div><pre style="background-color: #2b2b2b; color: #a9b7c6; font-family: &quot;宋体&quot;; font-size: 10.5pt;"><span style="color:#bbb529;">@Override<br /></span><span style="color:#cc7832;">public </span>Object <span style="color:#ffc66d;">postProcessBeforeInitialization</span>(Object bean<span style="color:#cc7832;">, </span>String beanName)<br />      <span style="color:#cc7832;">throws </span>BeansException {<br />   <span style="color:#bbb529;">ConfigurationProperties </span>annotation = AnnotationUtils<br />         .<span style="font-style:italic;">findAnnotation</span>(bean.getClass()<span style="color:#cc7832;">, </span><span style="color:#bbb529;">ConfigurationProperties</span>.<span style="color:#cc7832;">class</span>)<span style="color:#cc7832;">;<br /></span><span style="color:#cc7832;">   if </span>(annotation != <span style="color:#cc7832;">null</span>) {<br />      postProcessBeforeInitialization(bean<span style="color:#cc7832;">, </span>beanName<span style="color:#cc7832;">, </span>annotation)<span style="color:#cc7832;">;<br /></span> }<br />   annotation = <span style="color:#cc7832;">this</span>.<span style="color:#9876aa;">beans</span>.findFactoryAnnotation(beanName<span style="color:#cc7832;">,<br /></span> <span style="color:#bbb529;">ConfigurationProperties</span>.<span style="color:#cc7832;">class</span>)<span style="color:#cc7832;">;<br /></span><span style="color:#cc7832;">   if </span>(annotation != <span style="color:#cc7832;">null</span>) {<br />      postProcessBeforeInitialization(bean<span style="color:#cc7832;">, </span>beanName<span style="color:#cc7832;">, </span>annotation)<span style="color: #cc7832;">;<br /></span> }<br />   <span style="color:#cc7832;">return </span>bean<span style="color:#cc7832;">;<br /></span>}</pre></div><br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/432940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2017-12-08 14:13 <a href="http://www.blogjava.net/miaoyachun/archive/2017/12/08/432940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Junit @AfterClass访问注入对象的方法</title><link>http://www.blogjava.net/miaoyachun/archive/2017/04/15/432461.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Sat, 15 Apr 2017 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2017/04/15/432461.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/432461.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2017/04/15/432461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/432461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/432461.html</trackback:ping><description><![CDATA[<div><span data-slate-fragment="JTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJkb2N1bWVudCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyU3ByaW5nJUU5JUJCJTk4JUU4JUFFJUE0JUU0JUI4JThEJUU1JTg1JTgxJUU4JUFFJUI4JUU1JUFGJUI5JUU3JUIxJUJCJUU3JTlBJTg0JUU1JThGJTk4JUU5JTg3JThGJTJDJTIwJUU0JUI5JTlGJUU1JUIwJUIxJUU2JTk4JUFGJUU5JTlEJTk5JUU2JTgwJTgxJUU1JThGJTk4JUU5JTg3JThGJUU4JUJGJTlCJUU4JUExJThDJUU2JUIzJUE4JUU1JTg1JUE1JUU2JTkzJThEJUU0JUJEJTlDJTJDJTIwJUU0JUJEJTg2JUU2JTk4JUFGJUU1JTlDJUE4JUU2JTlGJTkwJUU0JUJBJTlCJUU1JTlDJUJBJUU2JTk5JUFGJUU2JUFGJTk0JUU1JUE2JTgyJUU1JThEJTk1JUU1JTg1JTgzJUU2JUI1JThCJUU4JUFGJTk1JUU3JTlBJTg0JTQwQWZ0ZXJDbGFzcyVFOCVBNiU4MSVFOCVBRSVCRiVFOSU5NyVBRSVFNiVCMyVBOCVFNSU4NSVBNSVFNSVBRiVCOSVFOCVCMSVBMSUyQyUyMCVFOCU4MCU4Q0p1bml0JUU3JTlBJTg0JUU4JUJGJTk5JUU0JUI4JUFBJUU2JTk2JUI5JUU2JUIzJTk1JUU1JUJGJTg1JUU5JUExJUJCJUU2JTk4JUFGJUU5JTlEJTk5JUU2JTgwJTgxJUU3JTlBJTg0JTJDJTIwJUU0JUI5JTlGJUU1JUIwJUIxJUU0JUJBJUE3JUU3JTk0JTlGJUU0JUJBJTg2JUU2JTgyJTk2JUU4JUFFJUJBJTNCJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIycGFyYWdyYXBoJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlRTglQTclQTMlRTUlODYlQjMlRTYlODAlOUQlRTglQjclQUYlRTYlOUMlODklRTQlQjglQTQlRTQlQjglQUElM0ElMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJ1bm9yZGVyZWRfbGlzdCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmxpc3RfaXRlbSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMnVuc3R5bGVkJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlRTYlODAlOUQlRTglQjclQUYxJTNBJTIwJUU2JTgzJUIzJUU1JThBJTlFJUU2JUIzJTk1JUU1JUFGJUI5JUU5JTlEJTk5JUU2JTgwJTgxJUU1JThGJTk4JUU5JTg3JThGJUU2JUIzJUE4JUU1JTg1JUE1JTJDJTIwJUU0JUI5JTlGJUU1JUIwJUIxJUU2JTk4JUFGJUU3JUJCJTk1JUU4JUJGJTg3U3ByaW5nJUU1JThGJUFBJUU4JTgzJUJEJUU4JUJGJTkwJUU4JUExJThDJUU5JTlEJTlFJUU5JTlEJTk5JUU2JTgwJTgxJUU1JThGJTk4JUU5JTg3JThGJUU2JTg5JThEJUU4JTgzJUJEJUU2JUIzJUE4JUU1JTg1JUE1JUU0JUJFJTlEJUU4JUI1JTk2JUU3JTlBJTg0JUU1JUEzJTgxJUU1JTlFJTkyJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIybGlzdF9pdGVtJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIydW5zdHlsZWQlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNiU4MCU5RCVFOCVCNyVBRjIlM0ElMjAlRTYlODMlQjMlRTUlOEElOUUlRTYlQjMlOTUlNDBBZnRlckNsYXNzJUU2JTk0JUI5JUU5JTgwJUEwJUU0JUI4JUJBJUU5JTlEJTlFJUU5JTlEJTk5JUU2JTgwJTgxJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIydW5vcmRlcmVkX2xpc3QlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJsaXN0X2l0ZW0lMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJ1bnN0eWxlZCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUU1JUFFJTlFJUU3JThFJUIwSnVuaXQlMjBSdW5MaXN0ZW5lciUyQyUyMCVFOCVBNiU4NiVFNyU5QiU5NnRlc3RSdW5GaW5pc2hlZCVFNiU5NiVCOSVFNiVCMyU5NSUyQyUyMCVFOCVCRiU5OSVFOSU4NyU4QyVFNSU4RSVCQiVFNSVBRSU5RSVFNyU4RSVCMCVFNyVCMSVCQiVFNCVCQyVCQyU0MEFmdGVyQ2xhc3MlRTclOUElODQlRTUlOEElOUYlRTglODMlQkQlMkMlMjAlRTglQkYlOTklRTQlQjglQUElRTYlOTYlQjklRTYlQjMlOTUlRTYlOTglQUYlRTklOUQlOUUlRTklOUQlOTklRTYlODAlODElRTclOUElODQlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJsaXN0X2l0ZW0lMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJ1bnN0eWxlZCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUU0JUI4JThEJUU4JUE2JTgxJUU3JTk0JUE4SnVuaXQlMkMlMjAlRTYlOTQlQjklRTclOTQlQThUZXN0TkclMkMlMjBUZXN0TkclRTklODclOEMlRTclOUElODRBZnRlckNsYXNzJUU2JTk4JUFGJUU5JTlEJTlFJUU5JTlEJTk5JUU2JTgwJTgxJUU3JTlBJTg0JTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIybGlzdF9pdGVtJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIydW5zdHlsZWQlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNyU5NCVBOFNwcmluZyVFNyU5QSU4NFRlc3RFeGVjdXRpb25MaXN0ZW5lcnMlMkMlMjAlRTUlQUUlOUUlRTclOEUlQjAlRTQlQjglQUFMaXN0ZW5lciUyQyUyMCVFOSU4NyU4QyVFOSU5RCVBMiVFNCVCOSU5RiVFNiU5QyU4OSVFNCVCOCVBQSVFNyVCMSVCQiVFNCVCQyVCQyVFOSU5RCU5RSVFOSU5RCU5OSVFNiU4MCU4MSVFNyU5QSU4NEFmdGVyQ2xhc3MlRTclOUElODQlRTUlQUUlOUUlRTclOEUlQjAlMkMlMjAlRTglQTYlODYlRTclOUIlOTYlRTUlQUUlOUUlRTclOEUlQjAlRTUlQjAlQjElRTglQTElOEMlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFNiU4MCU5RCVFOCVCNyVBRjIlRTclOUElODQlRTUlODclQTAlRTQlQjglQUElRTYlOTYlQjklRTYlQjMlOTUlRTklODMlQkQlRTUlOEYlQUYlRTQlQkIlQTUlRTUlQUUlOUUlRTclOEUlQjAlMkMlMjAlRTQlQkQlODYlRTYlOTglQUYlRTUlOEQlOTUlRTUlODUlODMlRTYlQjUlOEIlRTglQUYlOTVSdW5uZXIlRTklOUMlODAlRTglQTYlODElRTclOTQlQTglMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlMjJzeW50YXglMjIlM0ElMjJqYXZhJTIyJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9ibG9jayUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTQwUnVuV2l0aChUaGVvcmllcy5jbGFzcyklMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJwYXJhZ3JhcGglMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiVFOCU4MCU4QyVFNCVCOCU5NCVFNiU5NCVCOSVFNyU5NCVBOFRlc3RORyVFNSVCNyVBNSVFNyVBOCU4QiVFNiVCNSVBOSVFNSVBNCVBNyUyQyUyMCVFNSU4RiVBQSVFOCU4MyVCRCVFNiU5NCVCRSVFNSVCQyU4MyVFNiU4RSU4OSVFOCVCRiU5OSVFNCVCOCVBQSVFNiU4MCU5RCVFOCVCNyVBRiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUU3JUJCJUE3JUU3JUJCJUFEJUU4JUI1JUIwJUU2JTgwJTlEJUU4JUI3JUFGMSUyQyUyMCVFNSU4RiVBQSVFOCU4MyVCRCVFNSU4RSVCQiVFNyVCQiU5NSVFOCVCRiU4N1NwcmluZyVFNyU5QSU4NCVFNCVCRSU5RCVFOCVCNSU5NiVFNiVCMyVBOCVFNSU4NSVBNSVFNyU5QSU4NHN0YXRpYyVFNSVBMyU4MSVFNSU5RSU5MiVFNCVCQSU4NiUyQyUyMCVFNSU4NSVCNyVFNCVCRCU5MyVFNCVCQiVBMyVFNyVBMCU4MSVFNSVBNiU4MiVFNCVCOCU4QiUzQSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiUyMnN5bnRheCUyMiUzQSUyMmphdmElMjIlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2Jsb2NrJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlNDBBdXRvd2lyZWQlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMHByaXZhdGUlMjBEZXN0aW5hdGlvbiUyMGRmc09wZXJhdGlvblF1ZXVlJTNCJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjBwcml2YXRlJTIwc3RhdGljJTIwRGVzdGluYXRpb24lMjBkZnNPcGVyYXRpb25RdWV1ZVN0YXRpYyUzQiUyMCUyRiUyRiUyMHN0YXRpYyUyMHZlcnNpb24lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCU0MEF1dG93aXJlZCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwcHJpdmF0ZSUyME1lc3NhZ2VRdWV1ZUFQSSUyMG1lc3NhZ2VRdWV1ZUFQSSUzQiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwcHJpdmF0ZSUyMHN0YXRpYyUyME1lc3NhZ2VRdWV1ZUFQSSUyMG1lc3NhZ2VRdWV1ZUFQSVN0YXRpYyUzQiUyMCUyRiUyRiUyMHN0YXRpYyUyMHZlcnNpb24lMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlNDBQb3N0Q29uc3RydWN0JTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjBwdWJsaWMlMjB2b2lkJTIwaW5pdCgpJTIwJTdCJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkZnNPcGVyYXRpb25RdWV1ZVN0YXRpYyUyMCUzRCUyMHRoaXMuZGZzT3BlcmF0aW9uUXVldWUlM0IlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1lc3NhZ2VRdWV1ZUFQSVN0YXRpYyUyMCUzRCUyMHRoaXMubWVzc2FnZVF1ZXVlQVBJJTNCJTIyJTJDJTIybWFya3MlMjIlM0ElNUIlNUQlN0QlNUQlN0QlNUQlN0QlMkMlN0IlMjJkYXRhJTIyJTNBJTdCJTdEJTJDJTIya2luZCUyMiUzQSUyMmJsb2NrJTIyJTJDJTIyaXNWb2lkJTIyJTNBZmFsc2UlMkMlMjJ0eXBlJTIyJTNBJTIyY29kZV9saW5lJTIyJTJDJTIybm9kZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIydGV4dCUyMiUyQyUyMnJhbmdlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJyYW5nZSUyMiUyQyUyMnRleHQlMjIlM0ElMjIlMjAlMjAlMjAlMjAlN0QlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTQwQWZ0ZXJDbGFzcyUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwcHVibGljJTIwc3RhdGljJTIwdm9pZCUyMGFmdGVyQ2xhc3MoKSUyMCU3QiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTWVzc2FnZVZPJTIwbWVzc2FnZVZPJTIwJTNEJTIwbWVzc2FnZVF1ZXVlQVBJU3RhdGljLnJlbW92ZURlc3RpbmF0aW9uKGRmc09wZXJhdGlvblF1ZXVlU3RhdGljKSUzQiUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMmNvZGVfbGluZSUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2VWTyklM0IlMjIlMkMlMjJtYXJrcyUyMiUzQSU1QiU1RCU3RCU1RCU3RCU1RCU3RCUyQyU3QiUyMmRhdGElMjIlM0ElN0IlN0QlMkMlMjJraW5kJTIyJTNBJTIyYmxvY2slMjIlMkMlMjJpc1ZvaWQlMjIlM0FmYWxzZSUyQyUyMnR5cGUlMjIlM0ElMjJjb2RlX2xpbmUlMjIlMkMlMjJub2RlcyUyMiUzQSU1QiU3QiUyMmtpbmQlMjIlM0ElMjJ0ZXh0JTIyJTJDJTIycmFuZ2VzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnJhbmdlJTIyJTJDJTIydGV4dCUyMiUzQSUyMiUyMCUyMCUyMCUyMCU3RCUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdEJTJDJTdCJTIyZGF0YSUyMiUzQSU3QiU3RCUyQyUyMmtpbmQlMjIlM0ElMjJibG9jayUyMiUyQyUyMmlzVm9pZCUyMiUzQWZhbHNlJTJDJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMm5vZGVzJTIyJTNBJTVCJTdCJTIya2luZCUyMiUzQSUyMnRleHQlMjIlMkMlMjJyYW5nZXMlMjIlM0ElNUIlN0IlMjJraW5kJTIyJTNBJTIycmFuZ2UlMjIlMkMlMjJ0ZXh0JTIyJTNBJTIyJUU1JTg1JUI2JUU1JUFFJTlFJUU1JUIwJUIxJUU2JTk4JUFGJUU3JTk0JUE4JUU0JUJBJTg2JTQwUG9zdENvbnN0cnVjdCUyMCVFNiU5RCVBNSVFNCVCOCVBQSVFNSU4MSVCNyVFNiVBMiU4MSVFNiU4RCVBMiVFNiU5RiVCMSVFOCU4MCU4QyVFNSVCNyVCMiUyQyUyMCVFNSVBNCU5QSVFNSVBMyVCMCVFNiU5OCU4RSVFNCVCOCVBQSVFOSU5RCU5OSVFNiU4MCU4MSVFNiU4OCU5MCVFNSU5MSU5OCVFNiU4QyU4NyVFNSU5MCU5MSVFOSU5RCU5RSVFOSU5RCU5OSVFNiU4MCU4MSVFNSVBRiVCOSVFOCVCMSVBMSUyQyUyMCVFNCVCOCVBNCVFOCU4MCU4NSVFNSU4NSVCNiVFNSVBRSU5RSVFNiU5OCVBRiVFNCVCOCU4MCVFNCVCOCVBQSVFNSVBRiVCOSVFOCVCMSVBMSUyMiUyQyUyMm1hcmtzJTIyJTNBJTVCJTVEJTdEJTVEJTdEJTVEJTdEJTVEJTdE" style="box-sizing: border-box; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;">S</span>pring默认不允许对类的变量, 也就是静态变量进行注入操作, 但是在某些场景比如单元测试的@AfterClass要访问注入对象, 而Junit的这个方法必须是静态的, 也就产生了悖论;<p data-key="33745" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33744" style="box-sizing: border-box;"><span data-offset-key="33744-0" style="box-sizing: border-box;">解决思路有两个:</span></span></p><ul data-key="33762" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><li style="box-sizing: border-box;"><div data-key="33748" style="box-sizing: border-box;"><div data-key="33747" style="box-sizing: border-box; position: relative;"><span data-key="33746" style="box-sizing: border-box;"><span data-offset-key="33746-0" style="box-sizing: border-box;">思路1: 想办法对静态变量注入, 也就是绕过Spring只能运行非静态变量才能注入依赖的壁垒</span></span></div></div></li><li style="box-sizing: border-box;"><div data-key="33761" style="box-sizing: border-box;"><div data-key="33750" style="box-sizing: border-box; position: relative;"><span data-key="33749" style="box-sizing: border-box;"><span data-offset-key="33749-0" style="box-sizing: border-box;">思路2: 想办法@AfterClass改造为非静态</span></span></div><ul data-key="33760" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px;"><li style="box-sizing: border-box;"><div data-key="33753" style="box-sizing: border-box;"><div data-key="33752" style="box-sizing: border-box; position: relative;"><span data-key="33751" style="box-sizing: border-box;"><span data-offset-key="33751-0" style="box-sizing: border-box;">实现Junit RunListener, 覆盖testRunFinished方法, 这里去实现类似@AfterClass的功能, 这个方法是非静态的</span></span></div></div></li><li style="box-sizing: border-box;"><div data-key="33756" style="box-sizing: border-box;"><div data-key="33755" style="box-sizing: border-box; position: relative;"><span data-key="33754" style="box-sizing: border-box;"><span data-offset-key="33754-0" style="box-sizing: border-box;">不要用Junit, 改用TestNG, TestNG里的AfterClass是非静态的</span></span></div></div></li><li style="box-sizing: border-box;"><div data-key="33759" style="box-sizing: border-box;"><div data-key="33758" style="box-sizing: border-box; position: relative;"><span data-key="33757" style="box-sizing: border-box;"><span data-offset-key="33757-0" style="box-sizing: border-box;">用Spring的TestExecutionListeners, 实现个Listener, 里面也有个类似非静态的AfterClass的实现, 覆盖实现就行</span></span></div></div></li></ul></div></li></ul><p data-key="33764" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33763" style="box-sizing: border-box;"><span data-offset-key="33763-0" style="box-sizing: border-box;">思路2的几个方法都可以实现, 但是单元测试Runner需要用</span></span></p><div style="box-sizing: border-box; position: relative; color: #333333; font-family: Roboto,&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; background-color: #ffffff;"><pre data-key="33767" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; word-break: break-all; word-wrap: break-word; color: #333333; background-color: #f5f5f5; border: 1px solid #f5f5f5; border-radius: 2px;"><code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0px; color: inherit; background-color: transparent; border-radius: 0px; white-space: pre-wrap;"><div data-key="33766" style="box-sizing: border-box; position: relative;"><span data-key="33765" style="box-sizing: border-box;"><span data-offset-key="33765-0" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@RunWith</span></span><span data-offset-key="33765-1" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">(</span></span><span data-offset-key="33765-2" style="box-sizing: border-box;">Theories</span><span data-offset-key="33765-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33765-4" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">class</span></span><span data-offset-key="33765-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">)</span></span></span></div></code></pre></div><p data-key="33769" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33768" style="box-sizing: border-box;"><span data-offset-key="33768-0" style="box-sizing: border-box;">而且改用TestNG工程浩大, 只能放弃掉这个思路</span></span></p><p data-key="33771" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33770" style="box-sizing: border-box;"><span data-offset-key="33770-0" style="box-sizing: border-box;">继续走思路1, 只能去绕过Spring的依赖注入的static壁垒了, 具体代码如下:</span></span></p><div style="box-sizing: border-box; position: relative; color: #333333; font-family: Roboto,&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; background-color: #ffffff;"><pre data-key="33810" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; word-break: break-all; word-wrap: break-word; color: #333333; background-color: #f5f5f5; border: 1px solid #f5f5f5; border-radius: 2px;"><code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: inherit; padding: 0px; color: inherit; background-color: transparent; border-radius: 0px; white-space: pre-wrap;"><div data-key="33773" style="box-sizing: border-box; position: relative;"><span data-key="33772" style="box-sizing: border-box;"> <span data-offset-key="33772-1" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@Autowired</span></span></span></div><div data-key="33775" style="box-sizing: border-box; position: relative;"><span data-key="33774" style="box-sizing: border-box;"> <span data-offset-key="33774-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">private</span></span><span data-offset-key="33774-2" style="box-sizing: border-box;"> Destination dfsOperationQueue</span><span data-offset-key="33774-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span></span></div><div data-key="33777" style="box-sizing: border-box; position: relative;"><span data-key="33776" style="box-sizing: border-box;"> <span data-offset-key="33776-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">private</span></span> <span data-offset-key="33776-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">static</span></span><span data-offset-key="33776-4" style="box-sizing: border-box;"> Destination dfsOperationQueueStatic</span><span data-offset-key="33776-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span> <span data-offset-key="33776-7" style="box-sizing: border-box;"><span token="" comment=""  "="" style="box-sizing: border-box; color: #708090;">// static version</span></span></span></div><div data-key="33779" style="box-sizing: border-box; position: relative;"><span data-key="33778" style="box-sizing: border-box;"> <span data-offset-key="33778-1" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@Autowired</span></span></span></div><div data-key="33781" style="box-sizing: border-box; position: relative;"><span data-key="33780" style="box-sizing: border-box;"> <span data-offset-key="33780-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">private</span></span><span data-offset-key="33780-2" style="box-sizing: border-box;"> MessageQueueAPI messageQueueAPI</span><span data-offset-key="33780-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span></span></div><div data-key="33783" style="box-sizing: border-box; position: relative;"><span data-key="33782" style="box-sizing: border-box;"> <span data-offset-key="33782-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">private</span></span> <span data-offset-key="33782-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">static</span></span><span data-offset-key="33782-4" style="box-sizing: border-box;"> MessageQueueAPI messageQueueAPIStatic</span><span data-offset-key="33782-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span> <span data-offset-key="33782-7" style="box-sizing: border-box;"><span token="" comment=""  "="" style="box-sizing: border-box; color: #708090;">// static version</span></span></span></div><div data-key="33785" style="box-sizing: border-box; position: relative;"><span data-key="33784" style="box-sizing: border-box;"><span data-offset-key="33784-0" style="box-sizing: border-box;"><br style="box-sizing: border-box;" /></span></span></div><div data-key="33787" style="box-sizing: border-box; position: relative;"><span data-key="33786" style="box-sizing: border-box;"><span data-offset-key="33786-0" style="box-sizing: border-box;"><br style="box-sizing: border-box;" /></span></span></div><div data-key="33789" style="box-sizing: border-box; position: relative;"><span data-key="33788" style="box-sizing: border-box;"> <span data-offset-key="33788-1" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@PostConstruct</span></span></span></div><div data-key="33791" style="box-sizing: border-box; position: relative;"><span data-key="33790" style="box-sizing: border-box;"> <span data-offset-key="33790-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">public</span></span> <span data-offset-key="33790-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">void</span></span> <span data-offset-key="33790-5" style="box-sizing: border-box;"><span token="" function=""  "="" style="box-sizing: border-box; color: #dd4a68;">init</span></span><span data-offset-key="33790-6" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">()</span></span> <span data-offset-key="33790-8" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">{</span></span></span></div><div data-key="33793" style="box-sizing: border-box; position: relative;"><span data-key="33792" style="box-sizing: border-box;"><span data-offset-key="33792-0" style="box-sizing: border-box;">        dfsOperationQueueStatic </span><span data-offset-key="33792-1" style="box-sizing: border-box;"><span token="" operator=""  "="" style="box-sizing: border-box; color: #a67f59; background: rgba(255, 255, 255, 0.498039);">=</span></span> <span data-offset-key="33792-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">this</span></span><span data-offset-key="33792-4" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33792-5" style="box-sizing: border-box;">dfsOperationQueue</span><span data-offset-key="33792-6" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span></span></div><div data-key="33795" style="box-sizing: border-box; position: relative;"><span data-key="33794" style="box-sizing: border-box;"><span data-offset-key="33794-0" style="box-sizing: border-box;">        messageQueueAPIStatic </span><span data-offset-key="33794-1" style="box-sizing: border-box;"><span token="" operator=""  "="" style="box-sizing: border-box; color: #a67f59; background: rgba(255, 255, 255, 0.498039);">=</span></span> <span data-offset-key="33794-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">this</span></span><span data-offset-key="33794-4" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33794-5" style="box-sizing: border-box;">messageQueueAPI</span><span data-offset-key="33794-6" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">;</span></span></span></div><div data-key="33797" style="box-sizing: border-box; position: relative;"><span data-key="33796" style="box-sizing: border-box;"> <span data-offset-key="33796-1" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">}</span></span></span></div><div data-key="33799" style="box-sizing: border-box; position: relative;"><span data-key="33798" style="box-sizing: border-box;"><span data-offset-key="33798-0" style="box-sizing: border-box;"><br style="box-sizing: border-box;" /></span></span></div><div data-key="33801" style="box-sizing: border-box; position: relative;"><span data-key="33800" style="box-sizing: border-box;"> <span data-offset-key="33800-1" style="box-sizing: border-box;"><span token="" annotation=""  punctuation"="" style="box-sizing: border-box; color: #999999;">@AfterClass</span></span></span></div><div data-key="33803" style="box-sizing: border-box; position: relative;"><span data-key="33802" style="box-sizing: border-box;"> <span data-offset-key="33802-1" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">public</span></span> <span data-offset-key="33802-3" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">static</span></span> <span data-offset-key="33802-5" style="box-sizing: border-box;"><span token="" keyword=""  "="" style="box-sizing: border-box; color: #0077aa;">void</span></span> <span data-offset-key="33802-7" style="box-sizing: border-box;"><span token="" function=""  "="" style="box-sizing: border-box; color: #dd4a68;">afterClass</span></span><span data-offset-key="33802-8" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">()</span></span> <span data-offset-key="33802-10" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">{</span></span></span></div><div data-key="33805" style="box-sizing: border-box; position: relative;"><span data-key="33804" style="box-sizing: border-box;"><span data-offset-key="33804-0" style="box-sizing: border-box;">        MessageVO messageVO </span><span data-offset-key="33804-1" style="box-sizing: border-box;"><span token="" operator=""  "="" style="box-sizing: border-box; color: #a67f59; background: rgba(255, 255, 255, 0.498039);">=</span></span><span data-offset-key="33804-2" style="box-sizing: border-box;"> messageQueueAPIStatic</span><span data-offset-key="33804-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33804-4" style="box-sizing: border-box;"><span token="" function=""  "="" style="box-sizing: border-box; color: #dd4a68;">removeDestination</span></span><span data-offset-key="33804-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">(</span></span><span data-offset-key="33804-6" style="box-sizing: border-box;">dfsOperationQueueStatic</span><span data-offset-key="33804-7" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">);</span></span></span></div><div data-key="33807" style="box-sizing: border-box; position: relative;"><span data-key="33806" style="box-sizing: border-box;"><span data-offset-key="33806-0" style="box-sizing: border-box;">        System</span><span data-offset-key="33806-1" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33806-2" style="box-sizing: border-box;">out</span><span data-offset-key="33806-3" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">.</span></span><span data-offset-key="33806-4" style="box-sizing: border-box;"><span token="" function=""  "="" style="box-sizing: border-box; color: #dd4a68;">println</span></span><span data-offset-key="33806-5" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">(</span></span><span data-offset-key="33806-6" style="box-sizing: border-box;">messageVO</span><span data-offset-key="33806-7" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">);</span></span></span></div><div data-key="33809" style="box-sizing: border-box; position: relative;"><span data-key="33808" style="box-sizing: border-box;"> <span data-offset-key="33808-1" style="box-sizing: border-box;"><span token="" punctuation=""  "="" style="box-sizing: border-box; color: #999999;">}</span></span></span></div></code></pre></div><p data-key="33812" style="box-sizing: border-box; margin: 0px 0px 10px; color: #333333; font-family: Roboto, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.3px; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"><span data-key="33811" style="box-sizing: border-box;"><span data-offset-key="33811-0" style="box-sizing: border-box;">其实就是用了@PostConstruct 来个偷梁换柱而已, 多声明个静态成员指向非静态对象, 两者其实是一个对象</span></span></p></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/432461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2017-04-15 10:32 <a href="http://www.blogjava.net/miaoyachun/archive/2017/04/15/432461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过rest api管理activemq</title><link>http://www.blogjava.net/miaoyachun/archive/2016/10/22/431914.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Sat, 22 Oct 2016 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/10/22/431914.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/431914.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/10/22/431914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/431914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/431914.html</trackback:ping><description><![CDATA[<div><p>知道activemq现在已经支持了rest api, 但是官方对这部分的介绍一笔带过 (http://activemq.apache.org/rest.html), <br /></p><p><br /></p><p>通过google居然也没搜到一些有用的, 比如像删除一个destination, 都是问的多,然后没下文. 于是花了一些心思研究了一下:</p><p><br /></p><p>首先通过rest api获取当前版本所有已支持的协议</p><p>&nbsp;&nbsp;&nbsp; http://172.30.43.206:8161/api/jolokia/list</p><p><br /></p><p>然后根据json输出关于removeTopic, removeQueue的mbean实现通过rest api删除destination的方法, 注意到用GET请求而不是POST,不然会报错 (官网的例子里用的wget给的灵感, 开始用了POST老报错)<br /></p><p><br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.activemq.command.ActiveMQQueue;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.activemq.command.ActiveMQTopic;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.http.auth.AuthScope;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.http.auth.UsernamePasswordCredentials;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.http.impl.client.BasicCredentialsProvider;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.http.impl.client.DefaultHttpClient;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.HttpEntity;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.HttpHeaders;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.HttpMethod;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.MediaType;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.ResponseEntity;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.client.ClientHttpRequestFactory;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.http.client.HttpComponentsClientHttpRequestFactory;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.web.client.RestTemplate;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;javax.jms.Destination;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;javax.jms.JMSException;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.Arrays;<br /><br /></span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MessageQueueAdmin&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;RestTemplate&nbsp;restTemplate&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;getRestTemplate(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">admin</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">admin</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;String&nbsp;brokerHost&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">172.30.43.206</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;String&nbsp;adminConsolePort&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">8161</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;String&nbsp;protocol&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;removeDestination(Destination&nbsp;destination)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;JMSException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;destName,&nbsp;destType;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(destination&nbsp;</span><span style="color: #0000FF; ">instanceof</span><span style="color: #000000; ">&nbsp;ActiveMQQueue)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;((ActiveMQQueue)&nbsp;destination).getQueueName();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destType&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Queue</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;((ActiveMQTopic)&nbsp;destination).getTopicName();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destType&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Topic</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;build&nbsp;urls</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;String.format(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%s://%s:%s/api/jolokia/exec/org.apache.activemq:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">brokerName=localhost,type=Broker/remove%s/%s</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;protocol,&nbsp;brokerHost,&nbsp;adminConsolePort,&nbsp;destType,&nbsp;destName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;do&nbsp;operation</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpHeaders&nbsp;headers&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpHeaders();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpEntity</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;entity&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpEntity</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">parameters</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;headers);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResponseEntity&nbsp;response&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;restTemplate.exchange(url,&nbsp;HttpMethod.GET,&nbsp;entity,&nbsp;String.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(response.getBody());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;JMSException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActiveMQTopic&nbsp;topic&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ActiveMQTopic(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">test-activemq-topic</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeDestination(topic);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;RestTemplate&nbsp;getRestTemplate(String&nbsp;user,&nbsp;String&nbsp;password)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultHttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DefaultHttpClient();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BasicCredentialsProvider&nbsp;credentialsProvider&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BasicCredentialsProvider();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;credentialsProvider.setCredentials(AuthScope.ANY,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;UsernamePasswordCredentials(user,&nbsp;password));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpClient.setCredentialsProvider(credentialsProvider);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientHttpRequestFactory&nbsp;rf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpComponentsClientHttpRequestFactory(httpClient);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;RestTemplate(rf);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><br /><p>其他的请求,应该都是类似jolokia的exec get request的格式:</p><p><br /></p><p><div>https://jolokia.org/reference/html/protocol.html#exec</div></p><p><br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&lt;base&nbsp;url&gt;/exec/&lt;mbean&nbsp;name&gt;/&lt;operation&nbsp;name&gt;/&lt;arg1&gt;/&lt;arg2&gt;/<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.</span></div></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/431914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-10-22 17:31 <a href="http://www.blogjava.net/miaoyachun/archive/2016/10/22/431914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JmsTemplate CLIENT_ACKNOWLEDGE 模式下receive消息的问题</title><link>http://www.blogjava.net/miaoyachun/archive/2016/10/12/431885.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 12 Oct 2016 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/10/12/431885.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/431885.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/10/12/431885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/431885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/431885.html</trackback:ping><description><![CDATA[用Spring JMS 的JmsTemplate从消息队列消费消息时发现，使用了CLIENT_ACKNOWLEDGE模式，消息返回后总是自动被ack，也就是被broker "Dequeued"<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">&nbsp;Message&nbsp;doReceive(Session&nbsp;session,&nbsp;MessageConsumer&nbsp;consumer)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;JMSException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Use&nbsp;transaction&nbsp;timeout&nbsp;(if&nbsp;available).</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;timeout&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;getReceiveTimeout();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JmsResourceHolder&nbsp;resourceHolder&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(JmsResourceHolder)&nbsp;TransactionSynchronizationManager.getResource(getConnectionFactory());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(resourceHolder&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;resourceHolder.hasTimeout())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeout&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Math.min(timeout,&nbsp;resourceHolder.getTimeToLiveInMillis());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;message&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;doReceive(consumer,&nbsp;timeout);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(session.getTransacted())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Commit&nbsp;necessary&nbsp;-&nbsp;but&nbsp;avoid&nbsp;commit&nbsp;call&nbsp;within&nbsp;a&nbsp;JTA&nbsp;transaction.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(isSessionLocallyTransacted(session))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Transacted&nbsp;session&nbsp;created&nbsp;by&nbsp;this&nbsp;template&nbsp;-&gt;&nbsp;commit.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JmsUtils.commitIfNecessary(session);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(isClientAcknowledge(session))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Manually&nbsp;acknowledge&nbsp;message,&nbsp;if&nbsp;any.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(message&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.acknowledge();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;message;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JmsUtils.closeMessageConsumer(consumer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span></div><br />但是使用异步listener 就不会出现这个情况，搜了下google，发现果然存在这个问题<br /><br /><div>&nbsp;&nbsp;&nbsp;&nbsp; https://jira.spring.io/browse/SPR-12995<br />&nbsp;&nbsp;&nbsp;&nbsp; https://jira.spring.io/browse/SPR-13255<br />&nbsp;&nbsp;&nbsp;&nbsp; http://louisling.iteye.com/blog/241073</div><br />同步方式拉取消息，暂时没找到好的封装，只能暂时用这。或者尽量用listener, 这个问题暂时标记下，或者谁有更好的解决方案可以comment我<img src ="http://www.blogjava.net/miaoyachun/aggbug/431885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-10-12 16:32 <a href="http://www.blogjava.net/miaoyachun/archive/2016/10/12/431885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring中classpath与classpath*的区别</title><link>http://www.blogjava.net/miaoyachun/archive/2016/05/26/430666.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Thu, 26 May 2016 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/05/26/430666.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/430666.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/05/26/430666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/430666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/430666.html</trackback:ping><description><![CDATA[<div><div>http://stackoverflow.com/questions/3294423/spring-classpath-prefix-difference</div><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; "><br />&nbsp;&nbsp; <br /><br />SIMPLE&nbsp;DEFINITION<br /><br />The&nbsp;classpath*:conf/appContext.xml&nbsp;simply&nbsp;means&nbsp;that&nbsp;all&nbsp;appContext.xml&nbsp;files&nbsp;under&nbsp;conf&nbsp;folders&nbsp;in&nbsp;all&nbsp;your&nbsp;jars&nbsp;on&nbsp;the&nbsp;classpath&nbsp;will&nbsp;be&nbsp;picked&nbsp;up&nbsp;and&nbsp;joined&nbsp;into&nbsp;one&nbsp;big&nbsp;application&nbsp;context.<br /><br />In&nbsp;contrast</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&nbsp;classpath:conf/appContext.xml&nbsp;will&nbsp;load&nbsp;only&nbsp;one&nbsp;such&nbsp;file<img src="http://www.blogjava.net/Images/dot.gif" alt="" />&nbsp;the&nbsp;first&nbsp;one&nbsp;found&nbsp;on&nbsp;your&nbsp;classpath.<br /></span></div> </div><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><div><pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:9.8pt;"><span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">bean </span><span style="color:#0000ff;background-color:#efefef;font-weight:bold;">id</span><span style="color:#008000;background-color:#efefef;font-weight:bold;">="propertyConfigurer"<br /></span> <span style="color:#0000ff;background-color:#efefef;font-weight:bold;">class</span><span style="color:#008000;background-color:#efefef;font-weight:bold;">="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span><span style="background-color:#efefef;">&gt;</span><br />   <span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">property </span><span style="color:#0000ff;background-color:#efefef;font-weight:bold;">name</span><span style="color:#008000;background-color:#efefef;font-weight:bold;">="locations"</span><span style="background-color:#efefef;">&gt;</span><br />      <span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">list</span><span style="background-color:#efefef;">&gt;</span><br />         <span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">&gt;</span>classpath:*.properties<span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">&gt;</span><br />         <span style="background-color:#efefef;">&lt;</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">&gt;</span>classpath*:*.properties<span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">value</span><span style="background-color:#efefef;">&gt;</span><br />      <span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">list</span><span style="background-color:#efefef;">&gt;</span><br />   <span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">property</span><span style="background-color:#efefef;">&gt;</span><br /><span style="background-color:#efefef;">&lt;/</span><span style="color:#000080;background-color:#efefef;font-weight:bold;">bean</span><span style="background-color:#efefef;">&gt;</span></pre></div></div><br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/430666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-05-26 14:14 <a href="http://www.blogjava.net/miaoyachun/archive/2016/05/26/430666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>When launched from .exe IDEA looks for Java in a following order</title><link>http://www.blogjava.net/miaoyachun/archive/2016/05/16/430516.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Mon, 16 May 2016 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/05/16/430516.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/430516.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/05/16/430516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/430516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/430516.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><div>  <ol><li>IDEA_JDK (or IDEA_JDK_64) environment variable</li><li>jre/ (or jre64/) directory in IDEA home</li><li>registry</li><li>JDK_HOME environment variable</li><li>JAVA_HOME environment variable</li></ol></div></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/430516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-05-16 08:49 <a href="http://www.blogjava.net/miaoyachun/archive/2016/05/16/430516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java修改stdout的历史输出</title><link>http://www.blogjava.net/miaoyachun/archive/2016/04/21/430179.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Thu, 21 Apr 2016 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/04/21/430179.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/430179.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/04/21/430179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/430179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/430179.html</trackback:ping><description><![CDATA[java里如何修改console的历史输出信息呢？如果是当前行的修改可以简单想到"\r"的方案，但是如果要修改上一行呢? google了下原来还是有方法的，需要用到ansi的control sequences<br /><a title="ANSI code" href="http://www.real-world-systems.com/docs/ANSIcode.html">ANSI code</a><br /><br />用java写了个简单的例子，例子就是把曾经的output修改为其他字符串并恢复之后的打印，代码里加了sleep，主要方便理解各种控制序列的含义<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">print&nbsp;some&nbsp;test&nbsp;messages</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">22</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">333</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">4444</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;modify&nbsp;"333"&nbsp;to&nbsp;"-"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Move&nbsp;up&nbsp;two&nbsp;lines</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(String.format(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\033[%dA</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;count));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Erase&nbsp;current&nbsp;line&nbsp;content</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\033[2K</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;update&nbsp;with&nbsp;new&nbsp;content</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">-</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Move&nbsp;down&nbsp;two&nbsp;lines</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(String.format(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\033[%dB</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;count));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Move&nbsp;cursor&nbsp;to&nbsp;left&nbsp;beginning</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(String.format(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\033[D</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;count));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;continue&nbsp;print&nbsp;others</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">55555</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000; ">1000</span><span style="color: #000000; ">);</span></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/430179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-04-21 17:06 <a href="http://www.blogjava.net/miaoyachun/archive/2016/04/21/430179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zookeeper学习</title><link>http://www.blogjava.net/miaoyachun/archive/2016/03/31/429913.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Thu, 31 Mar 2016 06:06:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/03/31/429913.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/429913.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/03/31/429913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/429913.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/429913.html</trackback:ping><description><![CDATA[1. zookeeper basic/fast paxsos 的形象表述 https://www.douban.com/note/208430424/<br />2. 详细介绍 http://blog.csdn.net/xhh198781/article/details/10949697<img src ="http://www.blogjava.net/miaoyachun/aggbug/429913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-03-31 14:06 <a href="http://www.blogjava.net/miaoyachun/archive/2016/03/31/429913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring boot 开启reponse压缩以及部分参数设置</title><link>http://www.blogjava.net/miaoyachun/archive/2016/03/29/429861.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Tue, 29 Mar 2016 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/03/29/429861.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/429861.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/03/29/429861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/429861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/429861.html</trackback:ping><description><![CDATA[<div><pre style="background-color: #ffffff; color: #000000; font-family: &quot;DejaVu Sans Mono&quot;; font-size: 9pt;"><span style="color:#000080;background-color:#e4e4ff;font-weight:bold;">server.compression.enabled</span>=<span style="color:#008000;font-weight:bold;">true <br /></span><span style="color:#000080;font-weight:bold;">server.compression.mime-types</span>=<span style="color:#008000;font-weight:bold;">application/json,application/xml,text/html,text/xml,text/plain<br /></span><span style="color:#000080;font-weight:bold;">server.compression.min-response-size</span>=<span style="color:#008000;font-weight:bold;">4096</span></pre></div>第一个参数打开压缩开关，第二个参数添加json reponse（尤其是为rest api）,第三个参数是根据reponse的大小设置启用压缩的最小值(默认是2K，自己根据实际情况调整)<br /><br />参考<div>http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#how-to-enable-http-response-compression</div><img src ="http://www.blogjava.net/miaoyachun/aggbug/429861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-03-29 11:50 <a href="http://www.blogjava.net/miaoyachun/archive/2016/03/29/429861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于java默认的类加载器的简单代码研究</title><link>http://www.blogjava.net/miaoyachun/archive/2016/03/16/429685.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 16 Mar 2016 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/03/16/429685.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/429685.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/03/16/429685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/429685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/429685.html</trackback:ping><description><![CDATA[1. 默认的3个classloader: BootstrapClassloader (Native实现)， ExtClassloader, AppClassloader (Java实现)<br />2. 3个加载器并不是真正的父子继承关系，而是逻辑上的，JVM启动先创建ExtClassloader instance，然后构造AppClassloader的时候传入ExtClassloader实例作为parent<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Launcher.ExtClassLoader&nbsp;extcl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extcl&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Launcher.ExtClassLoader.getExtClassLoader();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(IOException&nbsp;var10)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">throw</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;InternalError(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Could&nbsp;not&nbsp;create&nbsp;extension&nbsp;class&nbsp;loader</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;var10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.loader&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Launcher.AppClassLoader.getAppClassLoader(extcl);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(IOException&nbsp;var9)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">throw</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;InternalError(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Could&nbsp;not&nbsp;create&nbsp;application&nbsp;class&nbsp;loader</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;var9);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div><br />关于双亲委派原理： 在加载类的时候，会看看parent有没有设定，如果设定了 就调用parent.loadClass方法，如果没设定(==null)也就是parent应该是BootstrapClassloader, 会调用native的findBootstrapClass来加载类，代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.parent&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.parent.loadClass(name,&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.findBootstrapClassOrNull(name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(ClassNotFoundException&nbsp;var10)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span></div><br />目的是按照一定优先级别装载系统的lib，系统ext目录的lib，以及classpath的lib，防止系统的默认行为或者类的实现被修改。<br /><br />3. java 类的动态加载<br /><div>Java内置的ClassLoader总会在加载一个Class之前检查这个Class是否已经被加载过，已经被加载过的Class不会加载第二次。因此要想重新加载Class，我们需要实现自己的ClassLoader。 <br />另外一个问题是，每个被加载的Class都需要被链接(link)，这是通过执行ClassLoader.resolve()来实现的，这个方法是  final的，因此无法重写。Resove()方法不允许一个ClassLoader实例link一个Class两次，因此，当你需要重新加载一个  Class的时候，你需要重新New一个你自己的ClassLoader实例。 </div><img src ="http://www.blogjava.net/miaoyachun/aggbug/429685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-03-16 15:40 <a href="http://www.blogjava.net/miaoyachun/archive/2016/03/16/429685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>项目中用到的一些maven插件总结</title><link>http://www.blogjava.net/miaoyachun/archive/2016/01/26/429206.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Tue, 26 Jan 2016 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2016/01/26/429206.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/429206.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2016/01/26/429206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/429206.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/429206.html</trackback:ping><description><![CDATA[<div>  <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">maven-shade-plugin&nbsp;用来打可执行jar包，&nbsp;可以把所有依赖的三方库都包括进来<br />exec-maven-plugin&nbsp;可以执行外部命令，&nbsp;在项目中对python代码进行编译，&nbsp;配合maven-assembly-plugin来生成package<br />maven-assembly-plugin&nbsp;用来构建项目发行包，&nbsp;要配合xml配置文件来组织包的结构，基本思路是从build环境copy到outputDirectory<br />license-maven-plugin&nbsp;用来生成项目用到的3方库的版权汇总&nbsp;或者其他的一些用法<br />maven-dependency-plugin&nbsp;用来生成项目库之间的依赖关系<br />appassembler-maven-plugin&nbsp;可以为项目生成优雅的启动脚本&nbsp;支持linux/win<br />rpm-maven-plugin&nbsp;用来为项目构建rpm安装包<br />maven-compiler-plugin&nbsp;指定项目的jdk的编译兼容版本以及encoding类别</span></div></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/429206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2016-01-26 11:41 <a href="http://www.blogjava.net/miaoyachun/archive/2016/01/26/429206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Idea 远程调式遇到使用exec maven 插件不能命中断点的问题</title><link>http://www.blogjava.net/miaoyachun/archive/2015/10/21/427858.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 21 Oct 2015 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2015/10/21/427858.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/427858.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2015/10/21/427858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/427858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/427858.html</trackback:ping><description><![CDATA[项目用mvn exec:exec指令来启动server, 工作中需要调式server初始化的过程, 很容易想到mvnDebug, 但是发现设置的断点都没有hit, 反复调式多次都是如此,折腾了1个多小时, 突然看到stackoverflow 上有人说exec:exec是独立进程模式, mvnDebug的一些debug选项都被append到了父进程了. idea设置断点就然并卵了.<br /><br />知道了问题所在解决就容易了, 只要修改pom.xml, 然后直接mvn exec:exec就能正常调式了<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;build&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugins&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugin&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;exec-maven-plugin&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;${mvnexec.version}&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;executions&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;execution&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;goals&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;goal&gt;exec&lt;/goal&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/goals&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/execution&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/executions&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;configuration&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;includeProjectDependencies&gt;true&lt;/includeProjectDependencies&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;executable&gt;java&lt;/executable&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;workingDirectory&gt;${basedir}/config/sim&lt;/workingDirectory&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;classpathScope&gt;runtime&lt;/classpathScope&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&gt;-agentlib:jdwp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">transport</span><span style="color: #000000; ">=</span><span style="color: #000000; ">dt_socket</span><span style="color: #000000; ">,</span><span style="color: #000000; ">server</span><span style="color: #000000; ">=</span><span style="color: #000000; ">y</span><span style="color: #000000; ">,</span><span style="color: #000000; ">suspend</span><span style="color: #000000; ">=</span><span style="color: #000000; ">y</span><span style="color: #000000; ">,</span><span style="color: #000000; ">address</span><span style="color: #000000; ">=</span><span style="color: #000000; ">4000</span><span style="color: #000000; ">&lt;/argument&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&gt;-classpath&lt;/argument&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;classpath/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&gt;com.ymiao.Main&lt;/argument&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&gt;server&lt;/argument&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&gt;${basedir}/config/sim/sim.yml&lt;/argument&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/configuration&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugins&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/build&gt;<br /></span></div><br />总结就是exec:exec是要独立一个新进程来执行程序的, exec:java就相反, 其实用mvnDebug + exec:java也是理论可行的<img src ="http://www.blogjava.net/miaoyachun/aggbug/427858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2015-10-21 17:12 <a href="http://www.blogjava.net/miaoyachun/archive/2015/10/21/427858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于jconsole显示自定义的MBean</title><link>http://www.blogjava.net/miaoyachun/archive/2015/09/08/427184.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Tue, 08 Sep 2015 02:53:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2015/09/08/427184.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/427184.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2015/09/08/427184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/427184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/427184.html</trackback:ping><description><![CDATA[项目中要用到MBean,于是快速体验下，体验过程中发现2个问题:<br /><br /><ol><li>自定义的Mbean的普通method能在jconsole的Mbeans里显示出来，但是涉及到geters/seters就无法显示了</li><li>如果MBean注册到下面形式创建的MBeanServer在Jconsole上无法显示的<div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">MBeanServer&nbsp;server&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MBeanServerFactory.createMBeanServer()</span><span style="color: #008000; ">;</span></div></div>但是如果注册到下面的形式创建的Server在Jconsole上是可以显示MBean的<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">MBeanServer server </span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ManagementFactory.getPlatformMBeanServer()</span><span style="color: #008000; ">;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br /></span></div></li></ol><p>stackoverflow上也有人发现这个问题 <div>&nbsp;&nbsp;&nbsp; http://stackoverflow.com/questions/7424009/mbeans-registered-to-mbean-server-not-showing-up-in-jconsole</div><br /></p><img src ="http://www.blogjava.net/miaoyachun/aggbug/427184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2015-09-08 10:53 <a href="http://www.blogjava.net/miaoyachun/archive/2015/09/08/427184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 常量池从jdk7开始从方法区迁移到堆内</title><link>http://www.blogjava.net/miaoyachun/archive/2015/05/06/424894.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 06 May 2015 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2015/05/06/424894.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/424894.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2015/05/06/424894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/424894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/424894.html</trackback:ping><description><![CDATA[<div>从jdk7最开始的release version (http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html)的notes里看到<br /><br />Area: HotSpot<br />Synopsis: In JDK 7, interned strings are no longer allocated in the permanent generation of the Java heap, but are instead allocated in the main part of the Java heap (known as the young and old generations), along with the other objects created by the application. This change will result in more data residing in the main Java heap, and less data in the permanent generation, and thus may require heap sizes to be adjusted. Most applications will see only relatively small differences in heap usage due to this change, but larger applications that load many classes or make heavy use of the String.intern() method will see more significant differences.<br />RFE: 6962931</div><br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/424894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2015-05-06 17:35 <a href="http://www.blogjava.net/miaoyachun/archive/2015/05/06/424894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu12.04s上jenkins用启动脚本启动失败的一种原因</title><link>http://www.blogjava.net/miaoyachun/archive/2015/02/28/423103.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Sat, 28 Feb 2015 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2015/02/28/423103.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/423103.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2015/02/28/423103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/423103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/423103.html</trackback:ping><description><![CDATA[<div> 今天有同事问为什么ubuntu上启动jenkins失败，我记得之前玩的时候并没有出现这种情况，于是跟踪了下，最终错误信息是:<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">daemon:&nbsp;fatal:&nbsp;refusing&nbsp;to&nbsp;execute&nbsp;unsafe&nbsp;program:&nbsp;/usr/bin/java&nbsp;(/opt&nbsp;is&nbsp;group&nbsp;and&nbsp;world&nbsp;writable)</span></div><br />根本原因是机器装了多个版本的jdk, jdk所在的/opt父目录的权限放的比较大，按照daemon要求的限制到755<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">chmod&nbsp;-R&nbsp;</span><span style="color: #000000; ">755</span><span style="color: #000000; ">&nbsp;/opt</span></div> </div><br />问题就解决了。<br /><br />其实这个场景还是蛮常见的，遇到的人应该挺多的<br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/423103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2015-02-28 16:51 <a href="http://www.blogjava.net/miaoyachun/archive/2015/02/28/423103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>valgrind memory check on java program</title><link>http://www.blogjava.net/miaoyachun/archive/2013/12/06/407274.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Fri, 06 Dec 2013 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2013/12/06/407274.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/407274.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2013/12/06/407274.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/407274.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/407274.html</trackback:ping><description><![CDATA[Java程序的memory leak分析也可以用valgrind, 尤其是JNI程序尤其有用:<br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">valgrind&nbsp;--error-limit</span><span style="color: #000000; ">=</span><span style="color: #000000; ">no&nbsp;--trace-children</span><span style="color: #000000; ">=</span><span style="color: #000000; ">yes&nbsp;--smc-check</span><span style="color: #000000; ">=</span><span style="color: #000000; ">all&nbsp;--leak-check</span><span style="color: #000000; ">=</span><span style="color: #000000; ">full&nbsp;JAVA_CMD</span></div><br />特意写了个有leak的jni函数，用valgrind成功检查出来了<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">==</span><span style="color: #000000; ">31915</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">&nbsp;bytes&nbsp;in&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;blocks&nbsp;are&nbsp;definitely&nbsp;lost&nbsp;in&nbsp;loss&nbsp;record&nbsp;</span><span style="color: #000000; ">447</span><span style="color: #000000; ">&nbsp;of&nbsp;</span><span style="color: #000000; ">653</span><span style="color: #000000; "><br /></span><span style="color: #000000; ">==</span><span style="color: #000000; ">31915</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;0x402CE68:&nbsp;malloc&nbsp;(in&nbsp;/usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)<br /></span><span style="color: #000000; ">==</span><span style="color: #000000; ">31915</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;by&nbsp;0x60424F9:&nbsp;Java_MyJNI_hello&nbsp;(MyJNI.c:</span><span style="color: #000000; ">16</span><span style="color: #000000; ">)<br /></span></div><br />在老版本valgrind(3.5.0) enable了--trace-children选项后可能出现错误:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><div><pre prettyprint=""  prettyprinted"=""><code> Error<span> occurred during initialization of VM    </span><br /> Unknown x64 processor: SSE2 not supported</code><br /></pre></div></div>升级到最新版可以解决这个问题，升级方法：下载src包 解压后执行 ./configure; make; make install</div><img src ="http://www.blogjava.net/miaoyachun/aggbug/407274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2013-12-06 10:26 <a href="http://www.blogjava.net/miaoyachun/archive/2013/12/06/407274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven本地三方依赖包插件addjars-maven-plugin</title><link>http://www.blogjava.net/miaoyachun/archive/2013/10/30/405795.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 30 Oct 2013 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2013/10/30/405795.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/405795.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2013/10/30/405795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/405795.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/405795.html</trackback:ping><description><![CDATA[maven项目中有很多本地三方依赖，但是一个一个加入dependency + system scope又很麻烦，又貌似没有搜索到通配符的成功案例，但是从stackoverflow上看到一个插件addjars-maven-plugin, 可以很好解决这类需求:<br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">build</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">plugins</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">com.googlecode.addjars-maven-plugin</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">addjars-maven-plugin</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1.0.2</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">executions</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">execution</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">goals</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">goal</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">add-jars</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">goal</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">goals</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">resource</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">directory</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">${basedir}/../lib</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">directory</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">resource</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">execution</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">executions</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.apache.maven.plugins</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">maven-assembly-plugin</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">${maven.assembly.version}</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">descriptorRefs</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">descriptorRef</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">jar-with-dependencies</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">descriptorRef</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">descriptorRefs</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">appendAssemblyId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">false</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">appendAssemblyId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">executions</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">execution</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">phase</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">package</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">phase</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">goals</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">goal</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">single</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">goal</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">goals</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">execution</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">executions</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">plugins</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">build</span><span style="color: #0000FF; ">&gt;</span></div>  </div><br />把项目中依赖的三方jars全放到lib目录里，就全部会打包到release jar里了<br /><br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/405795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2013-10-30 14:03 <a href="http://www.blogjava.net/miaoyachun/archive/2013/10/30/405795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>反编译java class并优雅的调试</title><link>http://www.blogjava.net/miaoyachun/archive/2013/02/22/395575.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Fri, 22 Feb 2013 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2013/02/22/395575.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/395575.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2013/02/22/395575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/395575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/395575.html</trackback:ping><description><![CDATA[<div>用jd-eclipse 插件来反编译java class文件的输出还是挺nice的，虽然阅读方便了 但是对debug确造成一定的困扰，主要问题是line number的不match. <br />Google了下遇到类似问题的真不少。最终找到了解决方案：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">http://sourceforge.net/projects/realignmentjd/files/<br />-----------------<br /><br /><div>1. Download JD-Eclipse and JD-GUI - http://java.decompiler.free.fr/ and  install.  <br />2. Put a file realignment.jd.ide.eclipse_1.0.2.jar in eclipse/plugins  directory.   <br />&nbsp;&nbsp;&nbsp; To  use Realignment feature it is necessary to open the menu   Preferences/General/Editors/File Associations and to select "*.class"   file type and to choose "Realignment for JD Class File Editor" for   Associated editors. <br />&nbsp;&nbsp;&nbsp; Another possibility is the batch realignment  after  processing JD-GUI. To work properly you must to switch on the  property  "Display line numbers" in Help/Preferences of JD-GUI. <br />&nbsp;&nbsp;&nbsp;  To use this  feature it is necessary to open the menu   Preferences/Java/Decompiler/Batch Realignment and click button "Open   dialog".  Existing limitation: the realignment is performed only for the  methods.<br />&nbsp; &nbsp; To work properly it is necessary that the property "Display line  numbers" in menu "Preferences/Java/Decompiler" was active.</div><br /></span></div></div><br /><span style="color: #000000; ">JD-Eclipse插件 +</span><span style="color: #000000; "> realignment</span> 补丁让优雅的debug class 文件成为可能。<br /><br />如果只是为了阅读class代码，建议不要用<span style="color: #000000; ">realignment</span> 补丁，这样会降低代码的可读性（会多出大量的空行）<br />&nbsp;<br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/395575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2013-02-22 15:01 <a href="http://www.blogjava.net/miaoyachun/archive/2013/02/22/395575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些项目中用到的mvn例子</title><link>http://www.blogjava.net/miaoyachun/archive/2013/01/10/394058.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Thu, 10 Jan 2013 05:33:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2013/01/10/394058.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/394058.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2013/01/10/394058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/394058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/394058.html</trackback:ping><description><![CDATA[<div><strong>mvn 执行外部命令</strong><br />命令行模式<br /><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">mvn&nbsp;exec:exec&nbsp;-Dexec.executable</span><span style="color: #000000; ">=</span><span style="color: #000000; ">sh&nbsp;-Dexec.workingdir</span><span style="color: #000000; ">=</span><span style="color: #000000; ">./bin&nbsp;-Dexec.args</span><span style="color: #000000; ">=</span><span style="color: #000000; ">hello.sh</span></div>  </div><br />配置文件形式<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugin&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;exec-maven-plugin&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;executions&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;execution&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&gt;test-exec&lt;/id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;phase&gt;initialize&lt;/phase&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;configuration&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;executable&gt;sh&lt;/executable&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;workingDirectory&gt;./bin&lt;/workingDirectory&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&gt;hello.sh&lt;/argument&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/configuration&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;goals&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;goal&gt;exec&lt;/goal&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/goals&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/execution&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/executions&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br /></span></div> </div><br /><strong>mvn 生成java项目</strong><br />生成骨架<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">mvn&nbsp;archetype:generate&nbsp;-DgroupId</span><span style="color: #000000; ">=</span><span style="color: #000000; ">com.abc.product&nbsp;-DartifactId</span><span style="color: #000000; ">=</span><span style="color: #000000; ">product&nbsp;-DpackageName</span><span style="color: #000000; ">=</span><span style="color: #000000; ">com.abc.product&nbsp;-DarchetypeArtifactId</span><span style="color: #000000; ">=</span><span style="color: #000000; ">maven-archetype-quickstart</span></div><br />转成eclipse能识别的java 项目<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">mvn&nbsp;eclipse:eclipse</span></div>导入eclipse 然后coding <br /><br /><strong>mvn进行单元测试</strong><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugin&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;</span><span style="color: #000000; ">2.12.4</span><span style="color: #000000; ">&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;configuration&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;forkMode&gt;pertest&lt;/forkMode&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;excludes&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;exclude&gt;**/perftest/*.java&lt;/exclude&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/excludes&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;systemProperties&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;log4j.configuration&lt;/name&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;target/test-classes/log4j.properties&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/systemProperties&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/configuration&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br /></span></div><br /><strong>mvn进行code coverage统计</strong><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; "></span><div>&nbsp; &lt;reporting&gt;<br />&nbsp;&nbsp;&nbsp; &lt;plugins&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;emma-maven-plugin&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.0-alpha-3&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;inherited&gt;true&lt;/inherited&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plugin&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;surefire-report-maven-plugin&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;inherited&gt;true&lt;/inherited&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/plugin&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/plugins&gt;<br />&nbsp; &lt;/reporting&gt;<br /></div><span style="color: #000000; "></span></div><br /><strong>mvn生成javadoc<br /></strong><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugin&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;</span><span style="color: #000000; ">2.9</span><span style="color: #000000; ">&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;configuration&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;show&gt;private&lt;/show&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/configuration&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;executions&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;execution&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&gt;attach-javadocs&lt;/id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;goals&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;goal&gt;javadoc&lt;/goal&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;goal&gt;test-javadoc&lt;/goal&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/goals&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;phase&gt;site&lt;/phase&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/execution&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/executions&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br /></span></div><br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/394058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2013-01-10 13:33 <a href="http://www.blogjava.net/miaoyachun/archive/2013/01/10/394058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于java.library.path</title><link>http://www.blogjava.net/miaoyachun/archive/2012/12/06/392529.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Thu, 06 Dec 2012 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2012/12/06/392529.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/392529.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2012/12/06/392529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/392529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/392529.html</trackback:ping><description><![CDATA[<div> <div>最近项目要用JNI, 涉及到用java.library.path这个参数，开始以为只要ldconfig能识别到的so文件java 一定能找到，可惜并不是这样。。<br />要想java程序找到共享库还是要在执行java程序的时候指定java.library.path，用eclipse的话可以设置如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><div>Properties-&gt;Run/Debug settings-&gt;Arguments-&gt;VM arguments<br />-----------------------------------------<br />-Djava.library.path=/home/miaoyachun/workspace/JNIC/Release</div></div></div>这个是传统的方式，google了下有个tricky的方式让程序动态修改java.library.path<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;loadJNILibDynamically()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.setProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">java.library.path</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;System.getProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">java.library.path</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">+</span>&nbsp;<span style="color: #000000; ">"</span><span style="color: #000000; ">:/home/miaoyachun/workspace/JNIC/Release/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;fieldSysPath&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ClassLoader.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">.getDeclaredField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">sys_paths</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldSysPath.setAccessible(</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldSysPath.set(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.loadLibrary(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">JNIC</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(Exception&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;do&nbsp;nothing&nbsp;for&nbsp;exception</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div> </div><br />事实上linux下还有个环境变量LD_LIBRARY_PATH，如果lib能在这个path里找到，java.library.path就不用配置了，而且不需要关心lib之间依赖的问题。java.library.path在这方面就弱很多，比如lib依赖其他目录的lib等。<img src ="http://www.blogjava.net/miaoyachun/aggbug/392529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2012-12-06 11:05 <a href="http://www.blogjava.net/miaoyachun/archive/2012/12/06/392529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu上的alternatives</title><link>http://www.blogjava.net/miaoyachun/archive/2012/10/26/390260.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Fri, 26 Oct 2012 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2012/10/26/390260.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/390260.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2012/10/26/390260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/390260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/390260.html</trackback:ping><description><![CDATA[<div>关于<span style="color: #000000; ">alternatives</span>的用法<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; "><br />alternatives&nbsp;--install&nbsp;/usr/bin/java&nbsp;java&nbsp;/opt/jdk1</span><span style="color: #000000; ">.5</span><span style="color: #000000; ">.0_</span><span style="color: #000000; ">22</span><span style="color: #000000; ">/bin/java&nbsp;</span><span style="color: #000000; ">15000</span><span style="color: #000000; "><br />alternatives&nbsp;--install&nbsp;/usr/bin/javac&nbsp;javac&nbsp;/opt/jdk1</span><span style="color: #000000; ">.5</span><span style="color: #000000; ">.0_</span><span style="color: #000000; ">22</span><span style="color: #000000; ">/bin/javac&nbsp;</span><span style="color: #000000; ">15000</span><span style="color: #000000; "><br />alternatives&nbsp;--config&nbsp;java<br />alternatives&nbsp;--config&nbsp;javac<br /></span></div></div>最近切换桌面环境到ubuntu, 发现<span style="color: #000000; ">alternatives</span>这个工具改名了:update-alternatives<br />用法还是一样的。。<br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/390260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2012-10-26 13:31 <a href="http://www.blogjava.net/miaoyachun/archive/2012/10/26/390260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JNI从C传递结构体到JAVA</title><link>http://www.blogjava.net/miaoyachun/archive/2012/10/12/389473.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Fri, 12 Oct 2012 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2012/10/12/389473.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/389473.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2012/10/12/389473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/389473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/389473.html</trackback:ping><description><![CDATA[<div> 直接上C的实现<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">typedef&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;Foo&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;len;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;name[</span><span style="color: #000000; ">100</span><span style="color: #000000; ">];<br />}&nbsp;Foo_t;<br /><br />JNIEXPORT&nbsp;jint&nbsp;JNICALL<br />Java_TestJNI_foo(JNIEnv&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">env,&nbsp;jobject&nbsp;obj,&nbsp;jobject&nbsp;fooObj)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Foo_t&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;bar&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;malloc(</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(Foo_t));<br />&nbsp;&nbsp;&nbsp;&nbsp;jclass&nbsp;clazz;<br />&nbsp;&nbsp;&nbsp;&nbsp;jfieldID&nbsp;fid;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">init&nbsp;the&nbsp;bar&nbsp;data&nbsp;of&nbsp;C</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;strcpy(bar</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">name,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Yachun&nbsp;Miao</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;bar</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">len&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;strlen(bar</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">name);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;mapping&nbsp;bar&nbsp;of&nbsp;C&nbsp;to&nbsp;foo</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;clazz&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">env)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">GetObjectClass(env,&nbsp;fooObj);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">0</span>&nbsp;<span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;clazz)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">GetObjectClass&nbsp;returned&nbsp;0\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;fid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">env)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">GetFieldID(env,&nbsp;clazz,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">len</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">I</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">env)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetLongField(env,&nbsp;fooObj,&nbsp;fid,&nbsp;bar</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">len);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;fid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">env)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">GetFieldID(env,&nbsp;clazz,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">name</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Ljava/lang/String;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;jstring&nbsp;name&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">env)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">NewStringUTF(env,&nbsp;bar</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">name);<br />&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">env)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">SetObjectField(env,&nbsp;fooObj,&nbsp;fid,&nbsp;name);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;free(bar);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div> </div><br />对应的Java调用<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Foo&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;len;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">&nbsp;String&nbsp;name;<br />}<br /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">native</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;foo(Foo&nbsp;fooObj);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String&nbsp;args[])&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.loadLibrary(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">mylib</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foo&nbsp;foo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000;">&nbsp;Foo();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foo(foo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(foo.name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(foo.len);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div><br />参考链接<br /><div>http://www.steveolyo.com/JNI/JNI.html#CSTRCJ</div><div>http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/types.html</div><br /><img src ="http://www.blogjava.net/miaoyachun/aggbug/389473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2012-10-12 16:40 <a href="http://www.blogjava.net/miaoyachun/archive/2012/10/12/389473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jetty SslSelectChannelConnector about file downloading</title><link>http://www.blogjava.net/miaoyachun/archive/2012/07/18/383427.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 18 Jul 2012 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2012/07/18/383427.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/383427.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2012/07/18/383427.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/383427.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/383427.html</trackback:ping><description><![CDATA[<div> 发现用curl从jetty服务器上download文件的速度比较慢大概只有4M/s, 开始以为curl有默认的limit-rate，设置为1G以后发现还是慢。<br />然后开始怀疑是jetty server的问题。看SslSelectChannelConnector的responseBufferSize比较像，反复实验发现原来是由于headerBufferSize太小。<br /> 改为32K以后：<br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SslSelectChannelConnector&nbsp;connector&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SslSelectChannelConnector();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connector.setRequestBufferSize(</span><span style="color: #000000; ">32768</span><span style="color: #000000; ">);</span></div> </div><br />效果：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">curl&nbsp;-k&nbsp;https://USER:PASSWD@HOST:PORT/api/internal/file?filename</span><span style="color: #000000; ">=</span><span style="color: #000000;">/path/to/file&nbsp;&gt;&nbsp;/dest/to/file<br />&nbsp;&nbsp;%&nbsp;Total&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;Received&nbsp;%&nbsp;Xferd&nbsp;&nbsp;Average&nbsp;Speed&nbsp;&nbsp;&nbsp;Time&nbsp;&nbsp;&nbsp;&nbsp;Time&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Time&nbsp;&nbsp;Current<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dload&nbsp;&nbsp;&nbsp;&nbsp; Upload&nbsp;&nbsp;&nbsp;Total&nbsp;&nbsp;&nbsp;Spent&nbsp;&nbsp;&nbsp;&nbsp; Left&nbsp;&nbsp; Speed<br /></span><span style="color: #000000; ">100</span><span style="color: #000000; ">&nbsp;&nbsp;723M&nbsp;&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">&nbsp;&nbsp;723M&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;&nbsp; </span><span style="color: #000000; ">29</span><span style="color: #000000; ">.3M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000; ">0</span><span style="color: #000000; ">:</span><span style="color: #000000; ">00</span><span style="color: #000000; ">:</span><span style="color: #000000; ">24</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">:</span><span style="color: #000000; ">00</span><span style="color: #000000; ">:</span><span style="color: #000000; ">24</span><span style="color: #000000; ">&nbsp;--:--:--&nbsp;</span><span style="color: #000000; ">29</span><span style="color: #000000; ">.4M<br /></span></div><br />ref: <a href="http://wiki.eclipse.org/Jetty/Howto/Configure_Connectors">http://wiki.eclipse.org/Jetty/Howto/Configure_Connectors</a><img src ="http://www.blogjava.net/miaoyachun/aggbug/383427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2012-07-18 18:22 <a href="http://www.blogjava.net/miaoyachun/archive/2012/07/18/383427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven project to eclipse java project</title><link>http://www.blogjava.net/miaoyachun/archive/2012/06/27/381618.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 27 Jun 2012 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2012/06/27/381618.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/381618.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2012/06/27/381618.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/381618.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/381618.html</trackback:ping><description><![CDATA[<br />steps:<br /><div>  <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">1</span><span style="color: #000000; ">.&nbsp;download&nbsp;maven&nbsp;project&nbsp;src&nbsp;code<br /></span><span style="color: #000000; ">2</span><span style="color: #000000; ">.&nbsp;cd&nbsp;project&nbsp;root&nbsp;dir&nbsp;&amp;&nbsp;run&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">mvn&nbsp;eclipse:eclipse</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #000000; ">3</span><span style="color: #000000;">.&nbsp;import&nbsp;it&nbsp;as&nbsp;eclipse&nbsp;java&nbsp;prject </span>&nbsp;&nbsp;&nbsp; <br /> </div>  </div><br />step2 will generate .classpath &amp; .project file<img src ="http://www.blogjava.net/miaoyachun/aggbug/381618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2012-06-27 15:56 <a href="http://www.blogjava.net/miaoyachun/archive/2012/06/27/381618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>项目依赖分析工具</title><link>http://www.blogjava.net/miaoyachun/archive/2012/06/13/380695.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Wed, 13 Jun 2012 08:13:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2012/06/13/380695.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/380695.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2012/06/13/380695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/380695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/380695.html</trackback:ping><description><![CDATA[<div>  <div>   <div>zane昨天推荐个项目依赖分析的工具: <a href="http://www.jboss.org/tattletale">http://www.jboss.org/tattletale</a><br />   </div>   <br /> </div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">JBoss&nbsp;Tattletale&nbsp;is&nbsp;a&nbsp;tool&nbsp;that&nbsp;can&nbsp;help&nbsp;you&nbsp;get&nbsp;an&nbsp;overview&nbsp;of&nbsp;the&nbsp;project&nbsp;you&nbsp;are&nbsp;working&nbsp;on<br />or&nbsp;a&nbsp;product&nbsp;that&nbsp;you&nbsp;depend&nbsp;on.<br /><br />The&nbsp;tool&nbsp;will&nbsp;provide&nbsp;you&nbsp;with&nbsp;reports&nbsp;that&nbsp;can&nbsp;help&nbsp;you<br /><br />*&nbsp;Identify&nbsp;dependencies&nbsp;between&nbsp;JAR&nbsp;files<br />*&nbsp;Find&nbsp;missing&nbsp;classes&nbsp;from&nbsp;the&nbsp;classpath<br />*&nbsp;Spot&nbsp;if&nbsp;a&nbsp;class/package&nbsp;is&nbsp;located&nbsp;in&nbsp;multiple&nbsp;JAR&nbsp;files<br />*&nbsp;Spot&nbsp;if&nbsp;the&nbsp;same&nbsp;JAR&nbsp;file&nbsp;is&nbsp;located&nbsp;in&nbsp;multiple&nbsp;locations<br />*&nbsp;With&nbsp;a&nbsp;list&nbsp;of&nbsp;what&nbsp;each&nbsp;JAR&nbsp;file&nbsp;requires&nbsp;and&nbsp;provides<br />*&nbsp;Verify&nbsp;the&nbsp;SerialVersionUID&nbsp;of&nbsp;a&nbsp;class<br />*&nbsp;Find&nbsp;similar&nbsp;JAR&nbsp;files&nbsp;that&nbsp;have&nbsp;different&nbsp;version&nbsp;numbers<br />*&nbsp;Find&nbsp;JAR&nbsp;files&nbsp;without&nbsp;a&nbsp;version&nbsp;number<br />*&nbsp;Find&nbsp;unused&nbsp;JAR&nbsp;files<br />*&nbsp;Identify&nbsp;sealed&nbsp;/&nbsp;signed&nbsp;JAR&nbsp;archives<br />*&nbsp;Locate&nbsp;a&nbsp;class&nbsp;in&nbsp;a&nbsp;JAR&nbsp;file<br />*&nbsp;Get&nbsp;the&nbsp;OSGi&nbsp;status&nbsp;of&nbsp;your&nbsp;project</span></div>  </div><br />使用方法<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">java&nbsp;-Xmx512m&nbsp;-jar&nbsp;tattletale.jar&nbsp;</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">-exclude=&lt;excludes&gt;</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; ">&nbsp;&lt;scan-directory&gt;&nbsp;</span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">output-directory</span><span style="color: #800000; font-weight: bold; ">]</span></div><br />注意事项<br /><div><span style="color: #000000; ">tattletale只分析jar包之间的依赖，需要自己把所有的class文件打包放入scan-directory，然后把依赖的lib也放入同个目录</span></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/380695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2012-06-13 16:13 <a href="http://www.blogjava.net/miaoyachun/archive/2012/06/13/380695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java进程memory leak分析</title><link>http://www.blogjava.net/miaoyachun/archive/2012/03/16/372005.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Fri, 16 Mar 2012 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2012/03/16/372005.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/372005.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2012/03/16/372005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/372005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/372005.html</trackback:ping><description><![CDATA[参考&nbsp;<a title="jmap &amp; jhat" href="http://www.marcsturlese.com/2009/05/09/analyzing-java-heaps-with-jmap-and-jhat/">jmap &amp; jhat</a><br />通过分析heap中对象的数量还有大小可以定位哪个类出了问题。<img src ="http://www.blogjava.net/miaoyachun/aggbug/372005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2012-03-16 09:45 <a href="http://www.blogjava.net/miaoyachun/archive/2012/03/16/372005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Program exception handling</title><link>http://www.blogjava.net/miaoyachun/archive/2012/03/12/371745.html</link><dc:creator>Milo的海域</dc:creator><author>Milo的海域</author><pubDate>Mon, 12 Mar 2012 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/miaoyachun/archive/2012/03/12/371745.html</guid><wfw:comment>http://www.blogjava.net/miaoyachun/comments/371745.html</wfw:comment><comments>http://www.blogjava.net/miaoyachun/archive/2012/03/12/371745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miaoyachun/comments/commentRss/371745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miaoyachun/services/trackbacks/371745.html</trackback:ping><description><![CDATA[1. 尽量避免抛出异常<br />&nbsp;&nbsp;&nbsp; 异常是有代价的，比如尽量避免使用异常来实现流程控制<br />2. 尽量处理异常<br />&nbsp;&nbsp;&nbsp; 有能力处理异常则处理掉，不然外层函数会累积太多的异常<br />3. 处理不了则抛出异常<br />&nbsp;&nbsp;&nbsp; 自己问自己，这个异常能够处理么，不行的话直接抛出，可以参考原则4<br />4. Throw early and catch late<br />&nbsp;&nbsp;&nbsp; 一般底层函数不会处理异常，外层函数会根据上下文捕获异常进行处理或者转换<br />5. 不要覆盖异常<br />6. try块不应该太大（代码规范）<br />7. 函数抛出的异常不应该太多（代码规范）<br /><br />参考<br /><div><a title="异常处理的10条最佳实践" href="http://www.wikijava.org/wiki/10_best_practices_with_Exceptions">异常处理的10条最佳实践</a></div><img src ="http://www.blogjava.net/miaoyachun/aggbug/371745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miaoyachun/" target="_blank">Milo的海域</a> 2012-03-12 16:35 <a href="http://www.blogjava.net/miaoyachun/archive/2012/03/12/371745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>