maven依赖war包创建项目

对于bs结构的项目,一般公司都是会有一个适合自己的通用框架,项目在此基础上添加业务功能,那么基础框架可以发布成一个独立的war包,其他项目都依赖与这个包来创建,当版本更新的时候就可以很方便的升级基础框架的东西。

下面来看一下创建的过程

1.创建maven项目

image

2.选择简单项目

image

3.输入项目的信息,和依赖的war包的信息

image

这样项目就创建完成了

打开创建好之后的项目里的文件pom.xml

可以看到依赖项如下

  <parent>
    <groupId>fullstacks</groupId>
    <artifactId>fullstacks.parent</artifactId>
    <version>1.0.0</version>
  </parent>

这样如果war包没有问题的话,就可以运行起来了,当然先配好tomcat

4.编译

image

第一次编译的时候会下载war包的内容,并生成目标文件

在项目的根目录下生成一个目录叫target,里面有下载的war包以及和新项目加入的文件,如果新项目里面有相同路径的文件则会覆盖掉依赖的内容,这样就形成了新的项目。如果想覆盖掉基础框架的文件比如js,html和资源文件之类的,只需要在相同的路径建立相同的文件就可以了。

Apache CXF Web 服务最简单的用法

之前一直用aix2来做服务,据说性能啥的不是很好,最近用了一下cxf发现很方便,下面来做个最简单的SOAP服务了解一下,当然cxf也可以用来做rest services等,只是一个注解的区别

 

创建Eclipse项目Maven项目

新建一个Maven项目

image

填写几个必要的参数,注意使用war包也就是web项目

image

配置Maven pom.xml的cxf jar包依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>fullstacks.cn</groupId>
	<artifactId>cxftest</artifactId>
	<version>1.0.0</version>

	<dependencies>


		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>3.1.2</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-databinding-aegis</artifactId>
			<version>3.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>3.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http-jetty</artifactId>
			<version>3.1.2</version>
			<!-- <scope>test</scope> -->
		</dependency>

	</dependencies>
</project>

 

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>cxfTest</display-name>

  
  <!-- cfx webSerivice -->  
    <servlet>    
        <servlet-name>cxf</servlet-name>    
        <servlet-class>  
            org.apache.cxf.transport.servlet.CXFServlet  
        </servlet-class>    
        <load-on-startup>1</load-on-startup>    
    </servlet>    
    <servlet-mapping>    
      <servlet-name>cxf</servlet-name>  
      <url-pattern>/services/*</url-pattern>    
    </servlet-mapping>    
    <session-config>    
      <session-timeout>60</session-timeout>    
    </session-config>  
</web-app>

 

服务端

接口

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface HelloWorld {
	@WebMethod	
	String sayHi(@WebParam(name="name") String name);  

}

接口的实现

import javax.jws.WebService;

@WebService(serviceName = "HelloWorlda", name = "HelloWorldb", portName = "HelloWorldcPort")
public class HelloWorldWs implements HelloWorld {

	@Override
	public String sayHi(String name) {
		return "Hello " + name + new Date();
	}

}

 

服务端的代码就这些,可以直接打包放到tomcat运行,或者在eclipse直接启动,访问地址为http://localhost:8080/cxftest/services?wsld

也可以使用cxf提供的jetty启动服务示例如下,下面这个运行之后的访问地址为http://127.0.0.1:8008/myws?wsld

public class ServerMain {
	 public static void main(String[] args) {  
	        HelloWorld hw = new HelloWorldWs();  
	        Endpoint.publish("http://127.0.0.1:8008/myws", hw);  
	        System.out.println("WebService已成功发布");  
	    }  
}

 

客户端

cxf提供访问服务有几种方式

1.Dynamic Client ,这是最简单的方法,没有之一

	 JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient(“http://127.0.0.1:8008/myws?wsld”); 
        Object[] res = client.invoke("sayHi","hl"); 
        System.out.println("Echo response: " + res[0]);

2.WSDL2Java generated Client , 这个需要用WSDL2Java命令生成所有需要的java类,然后调用

HelloService service = new HelloService();

Hello client = service.getHelloHttpPort();

String result = client.sayHi("Joe");

3.JAX-WS Proxy

import java.net.URL;

import javax.xml.ws.Service;

...

URL wsdlURL = new URL("http://localhost/hello?wsdl");

QName SERVICE_NAME = new QName("http://apache.org/hello_world_soap_http", "SOAPService");

Service service = Service.create(wsdlURL, SERVICE_NAME);

Greeter client = service.getPort(Greeter.class);

String result = client.greetMe("test");

4.JAX-WS Dispatch APIs , 这种方法比较原始,但是比较容易传送一些复杂的参数

import java.net.URL;

import javax.xml.transform.Source;

import javax.xml.ws.Dispatch;

import javax.xml.ws.Service;

...

URL wsdlURL = new URL("http://localhost/hello?wsdl");

Service service = Service.create(wsdlURL, new QName("HelloService"));

Dispatch<Source> disp = service.createDispatch(new QName("HelloPort"), Source.class, Service.Mode.PAYLOAD);

Source request = new StreamSource("<hello/>")

Source response = disp.invoke(request);

上面就是apache cxf服务端和客户端很简单的写法,基本上大部分的业务都可以满足了。不过项目依赖的jar包比较多,这是开源项目的通病,会用到海量的jar包,不过好在有这个强大Maven工具帮你解决这些问题。

如果不需要jetty进行调试,那么这个依赖项在pom.xml里面可以去掉,这样也是少一点jar包,后续有机会再研究一下spring提供的服务是如何使用的。

MAVEN的使用

MAVEN是java的一个构建工具,她能够更快速的构建你的项目,更容易发布打包并且很好的控制版本以及处理各种错综复杂的Jar包依赖关系,一般在IDE中使用很少会涉及到命令行的,但是要想很好的使用她还是需要了解一下一些基本的东西,在IDE中只需要Click Click几下就搞定了。

1.安装
Maven是一个Java工具,所以你必须安装Java环境。首先,下载Maven并解压到你选择的安装目录,例如在windows下的C:\maven,或者Linux下的/usr/local/maven。然后添加系统变量$M2_HOME和M2_HOME/bin到你的系统路径。在终端或者命令提示里输入以下指令:

mvn –version

这应该打印你安装的Maven的版本,例如:
Maven version: 2.0.10
Java version: 1.6.0_12
OS name: “windows xp” version: “5.1” arch: “x86” Family: “windows”
2 下载所需插件

然后,在终端或者命令提示里输入以下指令:

mvn

这时,系统会下载maven运行所需的.jar文件到自动生成的默认路径为
C:\Documents    andSettings\Administrator\.m2\repository的文件夹中。
这个过程大概需要十几分钟。
3 创建一个项目
在你的命令行执行以下指令:

mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app

你将注意到此命令在当前目录创建了一个名为my-app的目录。
src/main/java目录包含项目源代码,src/test/java目录包含测试代码,而pom.xml为项目的Project Object  Model,或者POM。

4  配置eclipse的classpath

eclipse需要知道Maven的本地仓库的路径。所以,类路径变量M2_REPO必须设置。在eclipse内定义一个新的classpat   h变量:从菜单条,选择Window>Preferences,选择java>Build Path>Classpath>       Variables中添加名为MAVEN_REPO的变量,指向C:\Documents and   Settings\Administrator\.m2\repository。如果想让eclipse支持直接运行maven的goal,可以安装mavenide插件。

如果你有一个单模块的简单java项目,使用eclipse将十分简单。为了从你的POM产生eclipse项目文件,执行以下命令:

cd my-app

mvn eclipse:eclipse
如果你已经使用eclipse创建或者检出了项目,你只需在workspace中刷新项目。否则,你必须将项目导入eclipse工作空间(从菜单条选择File>Import>Existing Projects into Workspace)。

总结:
Maven2 的运行命令为 : mvn ,

常用命令为 :
mvn archetype:create :创建 Maven 项目
mvn compile :编译源代码

mvn test-compile :编译测试代码

mvn test : 运行应用程序中的单元测试

mvn site : 生成项目相关信息的网站

mvn clean :清除目标目录中的生成结果

mvn package : 依据项目生成 jar 文件

mvn install :在本地 Repository 中安装 jar

mvn eclipse:eclipse :生成 Eclipse 项目文件

生成项目

建一个 JAVA 项目 : mvn archetype:create -DgroupId=com.demo -DartifactId=App

建一个 web 项目 : mvn archetype:create -DgroupId=com.demo -DartifactId=web-app -DarchetypeArtifactId=maven-archetype-webapp

生成 Eclipse 项目

普通 Eclipse 项目执行 : mvn eclipse:eclipse

Eclipse WTP 项目执行 : mvn eclipse:eclipse –Dwtpversion=1.0 ( wtp1.0 以上版本均可用)

pom.xml 文件基本节点介绍

<project > :文件的根节点 .
<modelversion > : pom.xml 使用的对象模型版本 .
<groupId > :创建项目的组织或团体的唯一 Id.
<artifactId > :项目的唯一 Id, 可视为项目名 .
<packaging > :打包物的扩展名,一般有 JAR,WAR,EAR 等
<version > :产品的版本号 .
<name > :项目的显示名,常用于 Maven 生成的文档。
<url > :组织的站点,常用于 Maven 生成的文档。
<de.ion > :项目的描述,常用于 Maven 生成的文档。