<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>简单之美 &#187; Category &#187; Java</title>
	<atom:link href="http://shiyanjun.cn/archives/category/programming/java/feed" rel="self" type="application/rss+xml" />
	<link>http://shiyanjun.cn</link>
	<description>简单之美，难得简单，享受简单的唯美。</description>
	<lastBuildDate>Wed, 04 Mar 2026 07:04:53 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.2</generator>
	<item>
		<title>Nexus Repository OSS 3安装配置使用</title>
		<link>http://shiyanjun.cn/archives/1768.html</link>
		<comments>http://shiyanjun.cn/archives/1768.html#comments</comments>
		<pubDate>Thu, 04 Jan 2018 03:22:28 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[开源技术]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Nexus]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=1768</guid>
		<description><![CDATA[<p>Nexus Repository OSS 3是一个开源的仓库管理系统，提供了更加丰富的功能，而且安装、配置、使用起来也更加简单方便。OSS 3版本主要支持的仓库（Repository）包括如下：

bower
docker
maven
npm
nuget
pypi
raw
rubygems
yum

其中，对于上述每种类型的Nexus仓库，都分别具有如下主要3种类型：
hosted：本地仓库，可以将我们内部使用的一些Maven项目，发布到该类型仓库，供内部开发人员使用。
proxy：代理仓库，用来代理远程公共仓库，比如Maven中央仓库。
group：仓库组，用来合并多个类型（hosted/proxy）的仓库。
这里，我们主要以支持Java编程的Maven项目依赖管理和构建进行实践，Nexus版本为nexus-3.7.0-04。
安装配置
下载Nexus Repository Manager软件包：
解压缩后可以看到，生成nexus-3.7.0-04和sonatype-work两个目录:
是这两个目录在同一个目录下，例如我这里是在nexus目录下面。
可以在etc/nexus-default.properties配置文件中，修改对应的配置项，满足实际需要，这里我直接使用默认的，其它可以使用的配置可以参考官网说明。
如果使用自定义的JDK，可</p>]]></description>
	<p>Nexus Repository OSS 3是一个开源的仓库管理系统，提供了更加丰富的功能，而且安装、配置、使用起来也更加简单方便。OSS 3版本主要支持的仓库（Repository）包括如下：

bower
docker
maven
npm
nuget
pypi
raw
rubygems
yum

其中，对于上述每种类型的Nexus仓库，都分别具有如下主要3种类型：
hosted：本地仓库，可以将我们内部使用的一些Maven项目，发布到该类型仓库，供内部开发人员使用。
proxy：代理仓库，用来代理远程公共仓库，比如Maven中央仓库。
group：仓库组，用来合并多个类型（hosted/proxy）的仓库。
这里，我们主要以支持Java编程的Maven项目依赖管理和构建进行实践，Nexus版本为nexus-3.7.0-04。
安装配置
下载Nexus Repository Manager软件包：

wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.7.0-04-unix.tar.gz
tar xvzf nexus-3.7.0-04-unix.tar.gz

解压缩后可以看到，生成nexus-3.7.0-04和sonatype-work两个目录:

[root@ali-bj01-tst-cluster-004 nexus]# ls
nexus-3.7.0-04  sonatype-work

是这两个目录</p>			<content:encoded><![CDATA[<p>Nexus Repository OSS 3是一个开源的仓库管理系统，提供了更加丰富的功能，而且安装、配置、使用起来也更加简单方便。OSS 3版本主要支持的仓库（Repository）包括如下：

bower
docker
maven
npm
nuget
pypi
raw
rubygems
yum

其中，对于上述每种类型的Nexus仓库，都分别具有如下主要3种类型：
hosted：本地仓库，可以将我们内部使用的一些Maven项目，发布到该类型仓库，供内部开发人员使用。
proxy：代理仓库，用来代理远程公共仓库，比如Maven中央仓库。
group：仓库组，用来合并多个类型（hosted/proxy）的仓库。
这里，我们主要以支持Java编程的Maven项目依赖管理和构建进行实践，Nexus版本为nexus-3.7.0-04。
安装配置
下载Nexus Repository Manager软件包：
解压缩后可以看到，生成nexus-3.7.0-04和sonatype-work两个目录:
是这两个目录在同一个目录下，例如我这里是在nexus目录下面。
可以在etc/nexus-default.properties配置文件中，修改对应的配置项，满足实际需要，这里我直接使用默认的，其它可以使用的配置可以参考官网说明。
如果使用自定义的JDK，可</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/1768.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JVM 分代GC策略分析</title>
		<link>http://shiyanjun.cn/archives/397.html</link>
		<comments>http://shiyanjun.cn/archives/397.html#comments</comments>
		<pubDate>Sun, 15 Sep 2013 03:40:02 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[编程语言]]></category>
		<category><![CDATA[JVM]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=397</guid>
		<description><![CDATA[<p>
	我们以Sun HotSpot VM来进行分析，首先应该知道，如果我们没有指定任何GC策略的时候，JVM默认使用的GC策略。Java虚拟机是按照分代的方式来回收垃圾空间，我们应该知道，垃圾回收主要是针对堆（Heap）内存进行分代回收，将对内存可以分成新生代（Young Generation）、年老代（Tenured Generation）和永久代（Permanent Generation）三个部分。


	分代GC


	分代GC包括如下三代：



		新生代（Young Generation）
	


	新生代有划分为Eden、From Survivor和To Survivor三个部分，他们对应的内存空间的大小比例为8:1:1，也就是，为对象分配内存的时候，首先使用Eden空间，经过GC后，没有被回收的会首先进入From Survivor区域，任何时候，都会保持一个Survivorq区域（From Survivor或To Survivor）完全空闲，也就是说新生代的内存利用率最大为90%。From Survivor和To Survivor两个区域会根据GC的实际情况，进行互换，将From Survivor区域中的对象全部复制到To Survivor区域中，或者反过来，将To Survivor区域中的对象全部复制到From Survivor区域中。



		年老代（</p>]]></description>
	<p>
	我们以Sun HotSpot VM来进行分析，首先应该知道，如果我们没有指定任何GC策略的时候，JVM默认使用的GC策略。Java虚拟机是按照分代的方式来回收垃圾空间，我们应该知道，垃圾回收主要是针对堆（Heap）内存进行分代回收，将对内存可以分成新生代（Young Generation）、年老代（Tenured Generation）和永久代（Permanent Generation）三个部分。


	分代GC


	分代GC包括如下三代：



		新生代（Young Generation）
	


	新生代有划分为Eden、From Survivor和To Survivor三个部分，他们对应的内存空间的大小比例为8:1:1，也就是，为对象分配内存的时候，首先使用Eden空间，经过GC后，没有被回收的会首先进入From Survivor区域，任何时候，都会保持一个Survivorq区域（From Survivor或To Survivor）完全空闲，也就是说新生代的内存利用率最大为90%。From Survivor和To Survivor两个区域会根据GC的实际情况，进行互换，将From Survivor区域中的对象全部复制到To Survivor区域中，或者反过来，将To Survivor区域中的对象全部复制到From Survivor区域中。



		年老代（</p>			<content:encoded><![CDATA[<p>
	我们以Sun HotSpot VM来进行分析，首先应该知道，如果我们没有指定任何GC策略的时候，JVM默认使用的GC策略。Java虚拟机是按照分代的方式来回收垃圾空间，我们应该知道，垃圾回收主要是针对堆（Heap）内存进行分代回收，将对内存可以分成新生代（Young Generation）、年老代（Tenured Generation）和永久代（Permanent Generation）三个部分。


	分代GC


	分代GC包括如下三代：



		新生代（Young Generation）
	


	新生代有划分为Eden、From Survivor和To Survivor三个部分，他们对应的内存空间的大小比例为8:1:1，也就是，为对象分配内存的时候，首先使用Eden空间，经过GC后，没有被回收的会首先进入From Survivor区域，任何时候，都会保持一个Survivorq区域（From Survivor或To Survivor）完全空闲，也就是说新生代的内存利用率最大为90%。From Survivor和To Survivor两个区域会根据GC的实际情况，进行互换，将From Survivor区域中的对象全部复制到To Survivor区域中，或者反过来，将To Survivor区域中的对象全部复制到From Survivor区域中。



		年老代（</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/397.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开发JAX-WS 2.0 Web服务</title>
		<link>http://shiyanjun.cn/archives/388.html</link>
		<comments>http://shiyanjun.cn/archives/388.html#comments</comments>
		<pubDate>Sat, 14 Sep 2013 04:08:18 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[开源技术]]></category>
		<category><![CDATA[JAX-WS]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=388</guid>
		<description><![CDATA[<p>实现一个Web服务的过程，大概有3个基本的过程：

Web服务提供者设计并开发Web服务
Web服务提供者发布Web服务
Web服务请求者调用Web服务

下面，我通过一个例子，来实现上述过程：
假设一个Web服务提供者提供一个对域名进行探测解析的服务，给定一个域名，可以给出改域名解析后对应的IP地址列表。Web服务提供者设计并开发这个Web服务，然后将服务发布出去，并可以让Web服务请求者进行调用。
开发Web服务
服务接口文件DetectionService.java代码如下所示：
对应的实现类DomainDetectionService.java，如下所示：
上面用到一个DtectedResult类，如下所示：
生成Web Service描述文件（WSDL），如下所示：
经过上面步骤，生成了两个文件：DomainDetect_schema1.xsd和DomainDetect.wsdl，内容分别如下所示：

DomainDetector_schema1.xsd内容


DomainDetector.wsdl内容

可以看到，在wsdl文件中通过import引用了前面的schema文件，这个schema文件用于定义类型。
发布Web服务
我们可以发布我们上面开发的Web服务，代码如下所示：
可以查看本地运行的Web服务进程：
可见，服</p>]]></description>
	<p>实现一个Web服务的过程，大概有3个基本的过程：

Web服务提供者设计并开发Web服务
Web服务提供者发布Web服务
Web服务请求者调用Web服务

下面，我通过一个例子，来实现上述过程：
假设一个Web服务提供者提供一个对域名进行探测解析的服务，给定一个域名，可以给出改域名解析后对应的IP地址列表。Web服务提供者设计并开发这个Web服务，然后将服务发布出去，并可以让Web服务请求者进行调用。
开发Web服务
服务接口文件DetectionService.java代码如下所示：

package org.shirdrn.server.webservices.jaxws;
 
public interface DetectService {
       DetectedResult detect(String domain); 
}

对应的实现类DomainDetectionService.java，如下所示：

package org.shirdrn.server.webservices.jaxws;
 
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;
 
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
 
import org.xbill.DNS.Address;
 
@WebSe</p>			<content:encoded><![CDATA[<p>实现一个Web服务的过程，大概有3个基本的过程：

Web服务提供者设计并开发Web服务
Web服务提供者发布Web服务
Web服务请求者调用Web服务

下面，我通过一个例子，来实现上述过程：
假设一个Web服务提供者提供一个对域名进行探测解析的服务，给定一个域名，可以给出改域名解析后对应的IP地址列表。Web服务提供者设计并开发这个Web服务，然后将服务发布出去，并可以让Web服务请求者进行调用。
开发Web服务
服务接口文件DetectionService.java代码如下所示：
对应的实现类DomainDetectionService.java，如下所示：
上面用到一个DtectedResult类，如下所示：
生成Web Service描述文件（WSDL），如下所示：
经过上面步骤，生成了两个文件：DomainDetect_schema1.xsd和DomainDetect.wsdl，内容分别如下所示：

DomainDetector_schema1.xsd内容


DomainDetector.wsdl内容

可以看到，在wsdl文件中通过import引用了前面的schema文件，这个schema文件用于定义类型。
发布Web服务
我们可以发布我们上面开发的Web服务，代码如下所示：
可以查看本地运行的Web服务进程：
可见，服</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/388.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven构建应用程序常用配置</title>
		<link>http://shiyanjun.cn/archives/180.html</link>
		<comments>http://shiyanjun.cn/archives/180.html#comments</comments>
		<pubDate>Tue, 27 Aug 2013 08:11:02 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[开源技术]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://shiyanjun.cn/?p=180</guid>
		<description><![CDATA[<p>使用Maven来构建应用程序，可以非常方便地管理应用相关的资源。众所周知，应用程序中涉及到的一些依赖关系，如Java应用程序依赖jar文件，如果只是手动找到相应的资源，可能需要花费一些时间。而且，即使已经积累了库文件，在未来应用程序升级以后，还要考虑到依赖库文件的升级情况，再次搜索收集。
还有一个问题，对应用程序依赖文件的管理是个非常复杂工作，占用存储空间不说，还可能因为应用之间的版本问题导致依赖冲突。使用Maven的pom模型来构建应用程序，可以更加有效地的管理，而且配置内容非常清晰（有时多了，可能pom文件显得有点臃肿）。
下面将常用的Maven配置，整理如下，以备参考。首先，整理一个简单的目录，作为快速查询之用：

设置字符集
拷贝src/main/resources/资源文件
编译代码
、编译打包成jar文件
构建测试用例配置
输出依赖jar文件到指定目录
配置指定的repository
将应用及其依赖jar文件打成一个jar文件

具体配置的详细内容，如下所示：
1、设置字符集
在需要设置字符集的地方，引用${project.build.sourceEncoding}即可。
2、拷贝src/mai</p>]]></description>
	<p>使用Maven来构建应用程序，可以非常方便地管理应用相关的资源。众所周知，应用程序中涉及到的一些依赖关系，如Java应用程序依赖jar文件，如果只是手动找到相应的资源，可能需要花费一些时间。而且，即使已经积累了库文件，在未来应用程序升级以后，还要考虑到依赖库文件的升级情况，再次搜索收集。
还有一个问题，对应用程序依赖文件的管理是个非常复杂工作，占用存储空间不说，还可能因为应用之间的版本问题导致依赖冲突。使用Maven的pom模型来构建应用程序，可以更加有效地的管理，而且配置内容非常清晰（有时多了，可能pom文件显得有点臃肿）。
下面将常用的Maven配置，整理如下，以备参考。首先，整理一个简单的目录，作为快速查询之用：

设置字符集
拷贝src/main/resources/资源文件
编译代码
、编译打包成jar文件
构建测试用例配置
输出依赖jar文件到指定目录
配置指定的repository
将应用及其依赖jar文件打成一个jar文件

具体配置的详细内容，如下所示：
1、设置字符集

	&lt;properties&gt;
		&lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.b</p>			<content:encoded><![CDATA[<p>使用Maven来构建应用程序，可以非常方便地管理应用相关的资源。众所周知，应用程序中涉及到的一些依赖关系，如Java应用程序依赖jar文件，如果只是手动找到相应的资源，可能需要花费一些时间。而且，即使已经积累了库文件，在未来应用程序升级以后，还要考虑到依赖库文件的升级情况，再次搜索收集。
还有一个问题，对应用程序依赖文件的管理是个非常复杂工作，占用存储空间不说，还可能因为应用之间的版本问题导致依赖冲突。使用Maven的pom模型来构建应用程序，可以更加有效地的管理，而且配置内容非常清晰（有时多了，可能pom文件显得有点臃肿）。
下面将常用的Maven配置，整理如下，以备参考。首先，整理一个简单的目录，作为快速查询之用：

设置字符集
拷贝src/main/resources/资源文件
编译代码
、编译打包成jar文件
构建测试用例配置
输出依赖jar文件到指定目录
配置指定的repository
将应用及其依赖jar文件打成一个jar文件

具体配置的详细内容，如下所示：
1、设置字符集
在需要设置字符集的地方，引用${project.build.sourceEncoding}即可。
2、拷贝src/mai</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/180.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用JRegex抽取网页信息</title>
		<link>http://shiyanjun.cn/archives/1.html</link>
		<comments>http://shiyanjun.cn/archives/1.html#comments</comments>
		<pubDate>Sat, 17 Aug 2013 22:14:03 +0000</pubDate>
		<dc:creator><![CDATA[Yanjun]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[编程语言]]></category>
		<category><![CDATA[JRegex]]></category>

		<guid isPermaLink="false">http://shirdrn.org/?p=1</guid>
		<description><![CDATA[<p>当网络爬虫将网页下载到磁盘上以后，需要对这些网页中的内容进行抽取，为索引做准备。一个网页中的数据大部分是HTML标签，索引肯定不会去索引这些标签。也就是说，这种信息是没有用处的信息，需要在抽取过程中过滤掉。另外，一个网页中一般会存在广告信息、锚文本信息，还有一些我们不感兴趣的信息，都被视为垃圾信息，如果不加考虑这些内容，抽取出来的信息不仅占用存储空间，而且在索引以后，为终端用户提供检索服务，用户检会索到很多无用的垃圾信息，势必影响用户的体验。
这里，针对论坛，采用配置模板的方式来实现信息的抽取。使用的工具可以到http://jregex.sourceforge.net上下载，JRegex是一个基于Java的正则库，可以通过在正则模板中指定待抽取信息的变量，在抽取过程中会将抽取到的信息赋给该变量，从而得到感兴趣的信息。而且，JRegex库支持多级分组匹配。
为了直观，假设，有一个论坛的一个网页的源代码形如：
将该网页代码文件保存为bbsPage.txt文件，准备进行处理。
现在，我们的目标是抽取标题、作者、时间、内容这些内容，当然，标题完全可以从TIT</p>]]></description>
	<p>当网络爬虫将网页下载到磁盘上以后，需要对这些网页中的内容进行抽取，为索引做准备。一个网页中的数据大部分是HTML标签，索引肯定不会去索引这些标签。也就是说，这种信息是没有用处的信息，需要在抽取过程中过滤掉。另外，一个网页中一般会存在广告信息、锚文本信息，还有一些我们不感兴趣的信息，都被视为垃圾信息，如果不加考虑这些内容，抽取出来的信息不仅占用存储空间，而且在索引以后，为终端用户提供检索服务，用户检会索到很多无用的垃圾信息，势必影响用户的体验。
这里，针对论坛，采用配置模板的方式来实现信息的抽取。使用的工具可以到http://jregex.sourceforge.net上下载，JRegex是一个基于Java的正则库，可以通过在正则模板中指定待抽取信息的变量，在抽取过程中会将抽取到的信息赋给该变量，从而得到感兴趣的信息。而且，JRegex库支持多级分组匹配。
为了直观，假设，有一个论坛的一个网页的源代码形如：

&lt;a id=&quot;anchor&quot;&gt;标题&lt;/a&gt;
&lt;cont&gt;
     &lt;author&gt;a1&lt;/author&gt;
     &lt;time&gt;2009&lt;/time</p>			<content:encoded><![CDATA[<p>当网络爬虫将网页下载到磁盘上以后，需要对这些网页中的内容进行抽取，为索引做准备。一个网页中的数据大部分是HTML标签，索引肯定不会去索引这些标签。也就是说，这种信息是没有用处的信息，需要在抽取过程中过滤掉。另外，一个网页中一般会存在广告信息、锚文本信息，还有一些我们不感兴趣的信息，都被视为垃圾信息，如果不加考虑这些内容，抽取出来的信息不仅占用存储空间，而且在索引以后，为终端用户提供检索服务，用户检会索到很多无用的垃圾信息，势必影响用户的体验。
这里，针对论坛，采用配置模板的方式来实现信息的抽取。使用的工具可以到http://jregex.sourceforge.net上下载，JRegex是一个基于Java的正则库，可以通过在正则模板中指定待抽取信息的变量，在抽取过程中会将抽取到的信息赋给该变量，从而得到感兴趣的信息。而且，JRegex库支持多级分组匹配。
为了直观，假设，有一个论坛的一个网页的源代码形如：
将该网页代码文件保存为bbsPage.txt文件，准备进行处理。
现在，我们的目标是抽取标题、作者、时间、内容这些内容，当然，标题完全可以从TIT</p>]]></content:encoded>
			<wfw:commentRss>http://shiyanjun.cn/archives/1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
