Java 如何使用Maven发布RESTWeb服务的客户机jar?还有战争档案

Java 如何使用Maven发布RESTWeb服务的客户机jar?还有战争档案,java,rest,maven,jar,build,Java,Rest,Maven,Jar,Build,我已经创建了RESTWeb服务并生成了war文件。 我能够使用REST客户端部署和测试API。 我需要为我的RESTAPI提供客户端jar,用于那些将复杂对象作为参数的方法。 我知道这些复杂对象在我的本地类路径中(作为源创建者,我添加了依赖类)。 但是我所面临的问题是,如何使用Maven生成这些依赖的客户机jar并将其提供给我的RESTAPI客户机 所以任何人都可以告诉我如何为这些复杂对象生成客户机jar,并使用Maven将该客户机jar提供给RESTAPI客户机 我的Maven(pom.xml

我已经创建了RESTWeb服务并生成了war文件。 我能够使用REST客户端部署和测试API。 我需要为我的RESTAPI提供客户端jar,用于那些将复杂对象作为参数的方法。 我知道这些复杂对象在我的本地类路径中(作为源创建者,我添加了依赖类)。 但是我所面临的问题是,如何使用Maven生成这些依赖的客户机jar并将其提供给我的RESTAPI客户机

所以任何人都可以告诉我如何为这些复杂对象生成客户机jar,并使用Maven将该客户机jar提供给RESTAPI客户机 我的Maven(pom.xml)如下所示: =============================================================POM.xml=================================

<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>opentext</groupId>
  <artifactId>opentext</artifactId>
  <version>${project.version}.${svn.version}</version>
  <packaging>war</packaging>
  <dependencies>      
    <dependency>
    <groupId>com.wordnik</groupId>
    <artifactId>swagger-jersey-jaxrs_2.10</artifactId>
    <version>1.3.0</version>
    </dependency>
    <dependency>
    <groupId>org.fusesource.restygwt</groupId>
    <artifactId>restygwt</artifactId>
    <version>1.3.1</version>
    </dependency>
    <dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
       <groupId>org.codehaus.jackson</groupId>
       <artifactId>jackson-jaxrs</artifactId>
       <version>1.9.13</version>
</dependency>
<dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-xc</artifactId>
      <version>1.6.1</version>
 </dependency>
 <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.1</version>
    </dependency>
    </dependencies>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
    <finalName>BPMService</finalName>
  </build>
</project>

4.0.0
opentext
opentext
${project.version}.${svn.version}
战争
com.wordnik
swagger-jersey-jaxrs_2.10
1.3.0
org.fusesource.restygwt
restygwt
1.3.1
泽西岛
球衣束
1.17.1
org.codehaus.jackson
杰克逊·贾克斯
1.9.13
org.codehaus.jackson
杰克逊xc
1.6.1
commons httpclient
commons httpclient
3.1
src
src
**/*.爪哇
maven编译器插件
3.1
1.7
1.7
maven战争插件
2.3
网络内容
假的
BPM服务
我正在以下套餐中享受休息服务: REST服务包com.REST.entity.services

我的复杂对象位于com.rest.entity.bean包中。
我在REST服务方法中用作参数的那些复杂对象。

根据我们在您问题的评论部分中的对话:

下面是一个简单的maven项目,它在目标目录中创建一个Shiporder.class

由此产生的结构:

.
|-- pom.xml
|-- src
|   |-- main
|   |   |-- java
|   |   `-- resources
|   |       `-- shiporder.xsd
|   `-- test
|       `-- java
`-- target
    |-- classes
    |   |-- META-INF
    |   |   `-- sun-jaxb.episode
    |   |-- generated
    |   |   |-- ObjectFactory.class
    |   |   |-- Shiporder$Item.class
    |   |   |-- Shiporder$Shipto.class
    |   |   `-- Shiporder.class
    |   `-- shiporder.xsd
    |-- generated-sources
    |   `-- xjc
    |       |-- META-INF
    |       |   `-- sun-jaxb.episode
    |       `-- generated
    |           |-- ObjectFactory.java
    |           `-- Shiporder.java
    |-- maven-archiver
    |   `-- pom.properties
    |-- someservice-shared-0.0.1-SNAPSHOT.jar
    `-- surefire
我刚才从这里复制的xsd:


最后是maven pom:

<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>com.github.zarathustra</groupId>
        <artifactId>someservice-shared</artifactId>
        <version>0.0.1-SNAPSHOT</version>
<properties>
</properties>

        <build>
                <plugins>
                        <plugin>
                                <!-- The right documentation: http://confluence.highsource.org/display/MJIIP/User+Guide
                                        Interested in more? See also: https://stackoverflow.com/questions/2432859/difference-of-maven-jaxb-plugins -->
                                <groupId>org.jvnet.jaxb2.maven2</groupId>
                                <artifactId>maven-jaxb2-plugin</artifactId>
                                <version>0.8.3</version>
                                <executions>
                                        <execution>
                                                <goals>
                                                        <goal>generate</goal>
                                                </goals>
                                        </execution>
                                </executions>
                                <configuration>
                                        <extension>true</extension>
                                        <args>
                                                <arg>-XtoString</arg>
                                                <arg>-Xequals</arg>
                                                <arg>-XhashCode</arg>
                                                <arg>-Xcopyable</arg>
                                        </args>
                                        <plugins>
                                                <plugin>
                                                        <groupId>org.jvnet.jaxb2_commons</groupId>
                                                        <artifactId>jaxb2-basics</artifactId>
                                                        <version>0.6.5</version>
                                                </plugin>
                                        </plugins>
                                </configuration>
<dependencies>
                                        <dependency>
                                                <groupId>org.aspectj</groupId>
                                                <artifactId>aspectjweaver</artifactId>
                                                <version>1.7.3</version>
                                        </dependency>
                                </dependencies>
                        </plugin>
                </plugins>
        </build>
        <dependencies>
              <!-- To create Request & Responses -->
               <dependency>
                       <groupId>org.jvnet.jaxb2_commons</groupId>
                       <artifactId>jaxb2-basics-runtime</artifactId>
                       <version>0.6.5</version>
               </dependency>
        </dependencies>
</project>

4.0.0
com.github.zarathustra

  • 创建一个maven项目,如上所述 a) 检查配置,可能还有一些您喜欢的附加选项。 b) 请注意pom中的2个链接,有几个jaxb代码gen实现。 c) 检查依赖项更新,仅从旧项目的代码复制;)

  • 通过maven依赖项将结果jar添加到您的服务项目中

  • 福利?xsd,也可用于其他编程语言。 也可以作为任何文档的参考


    另一种选择是,如果您喜欢spring:

    通过REST实际发送的是什么?二进制数据,JSON?如果是JSON,则可以提供包含实体的附加库。Wich不是一个“客户端jar”,它将是一个包含客户端和服务器端公共类的jar。我希望客户端应该以XML的形式发送,但我的方法将支持这两种方式,因为我已将我的服务创建为:---------------------------------------------------------------@POST@Consumes({“application/json”,“application/XML”})@products({“application/json”,“application/javascript”,“application/xml”}@JSONP(callbackParam=“callback”)公共响应claimTask(com.business.entity.bean.claimTask)-------------------------------------------------------我希望客户端应该像下面这样发送XML,但我不知道如何传递JSON,所以我正在使用JAXB。一般来说,我会使用一些框架,比如在大多数情况下,您不必关心JSON或XML。无论如何,由于您不发送二进制数据,所以可以使用实体发布额外的jar。但是您使用的是jaxb,所以您可能有一个xsd?出版这本书就足够了。因为您可以从中生成客户机代码。My Each bean类是JXBI注释类com.business.entity.bean.AssignTask assignTaskObj=new com.business.entity.bean.AssignTask();assignTaskObj.setTaskId(“002481F0-8E9F”);assignTaskObj.setAssignedTo(“cn=lgautam”);StringWriter编写器=新的StringWriter();JAXBContext JAXBContext=JAXBContext.newInstance(com.business.jaxws.task.assigntask.assigntask.class);Marshaller jaxbMarshaller=jaxbContext.createMarshaller();jaxbMarshaller.marshal(assignTaskObj,编写者);DefaultHttpClient httpClient=新的DefaultHttpClient();HttpPost postRequest=新的HttpPost(“URL”);那么,为了拥有实体,您需要发布什么?一个xsd。您甚至可以从现有代码生成xsd,请参见此处:
    <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>com.github.zarathustra</groupId>
            <artifactId>someservice-shared</artifactId>
            <version>0.0.1-SNAPSHOT</version>
    <properties>
    </properties>
    
            <build>
                    <plugins>
                            <plugin>
                                    <!-- The right documentation: http://confluence.highsource.org/display/MJIIP/User+Guide
                                            Interested in more? See also: https://stackoverflow.com/questions/2432859/difference-of-maven-jaxb-plugins -->
                                    <groupId>org.jvnet.jaxb2.maven2</groupId>
                                    <artifactId>maven-jaxb2-plugin</artifactId>
                                    <version>0.8.3</version>
                                    <executions>
                                            <execution>
                                                    <goals>
                                                            <goal>generate</goal>
                                                    </goals>
                                            </execution>
                                    </executions>
                                    <configuration>
                                            <extension>true</extension>
                                            <args>
                                                    <arg>-XtoString</arg>
                                                    <arg>-Xequals</arg>
                                                    <arg>-XhashCode</arg>
                                                    <arg>-Xcopyable</arg>
                                            </args>
                                            <plugins>
                                                    <plugin>
                                                            <groupId>org.jvnet.jaxb2_commons</groupId>
                                                            <artifactId>jaxb2-basics</artifactId>
                                                            <version>0.6.5</version>
                                                    </plugin>
                                            </plugins>
                                    </configuration>
    <dependencies>
                                            <dependency>
                                                    <groupId>org.aspectj</groupId>
                                                    <artifactId>aspectjweaver</artifactId>
                                                    <version>1.7.3</version>
                                            </dependency>
                                    </dependencies>
                            </plugin>
                    </plugins>
            </build>
            <dependencies>
                  <!-- To create Request & Responses -->
                   <dependency>
                           <groupId>org.jvnet.jaxb2_commons</groupId>
                           <artifactId>jaxb2-basics-runtime</artifactId>
                           <version>0.6.5</version>
                   </dependency>
            </dependencies>
    </project>