Java Gwt Maven多模块。如何配置依赖项以将请求工厂代理放在共享模块中?

Java Gwt Maven多模块。如何配置依赖项以将请求工厂代理放在共享模块中?,java,xml,maven,gwt,multi-module,Java,Xml,Maven,Gwt,Multi Module,Gwt项目由三部分组成:客户端、共享和服务器 我想用maven创建这个结构,但对于gwt应用程序的每个部分,我希望有单独的模块 所以我有一个maven项目。它由4个模块组成: 父模块 网络模块 共享模块 服务器模块 我想把请求工厂代理接口放在共享模块中。我该怎么做 我当前的pom.xml配置不允许这样做。我收到错误,即: 无法将服务器模块中的类解析为类型 以下是我的配置: 1。父模块没有任何类或GWT配置。 它只有pom.xml。它关闭了其余的模块。以下是pom.xml: <?xml

Gwt项目由三部分组成:
客户端
共享
服务器

我想用maven创建这个结构,但对于gwt应用程序的每个部分,我希望有单独的模块

所以我有一个maven项目。它由4个模块组成:

  • 父模块
  • 网络模块
  • 共享模块
  • 服务器模块
  • 我想把
    请求工厂代理
    接口放在
    共享
    模块中。我该怎么做

    我当前的pom.xml配置不允许这样做。我收到错误,即:

    无法将服务器模块中的类解析为类型


    以下是我的配置:


    1。父模块没有任何类或GWT配置。 它只有
    pom.xml
    。它关闭了其余的模块。以下是pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <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.test</groupId>
        <artifactId>parent</artifactId>
        <packaging>pom</packaging>
        <version>1.0.0-SNAPSHOT</version>
        <modules>
            <module>server</module>
            <module>shared</module>
            <module>web</module>
        </modules>
    
        <dependencies>
        </dependencies>
    
    
        <build>
        </build>
    </project>
    
    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>pl.derp</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>web</artifactId>
        <packaging>war</packaging>
    
        <dependencies>
            <dependency>
                <groupId>pl.derp</groupId>
                <artifactId>shared</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>pl.derp</groupId>
                <artifactId>server</artifactId>
                <version>${project.version}</version>
            </dependency> 
        </dependencies>
    
        <build>
        </build>
    </project>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    
        <parent>
            <groupId>pl.derp</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>shared</artifactId>
        <packaging>jar</packaging>
        <dependencies>
        </dependencies>
            <build>
            </build>
        </project>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    
        <parent>
            <groupId>pl.derp</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>server</artifactId>
        <packaging>jar</packaging>
    
        <properties>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>pl.derp</groupId>
                <artifactId>shared</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    
    
        <build>
        </build>
    </project>
    
    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>pl.derp</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>web</artifactId>
        <packaging>war</packaging>
    
        <dependencies>
            <dependency>
                <groupId>pl.derp</groupId>
                <artifactId>shared</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>pl.derp</groupId>
                <artifactId>server</artifactId>
                <version>${project.version}</version>
            </dependency> 
        </dependencies>
    
        <build>
        </build>
    </project>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    
        <parent>
            <groupId>pl.derp</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>shared</artifactId>
        <packaging>jar</packaging>
        <dependencies>
        </dependencies>
            <build>
            </build>
        </project>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    
        <parent>
            <groupId>pl.derp</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>server</artifactId>
        <packaging>jar</packaging>
    
        <properties>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>pl.derp</groupId>
                <artifactId>shared</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    
    
        <build>
        </build>
    </project>
    
    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>pl.derp</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>web</artifactId>
        <packaging>war</packaging>
    
        <dependencies>
            <dependency>
                <groupId>pl.derp</groupId>
                <artifactId>shared</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>pl.derp</groupId>
                <artifactId>server</artifactId>
                <version>${project.version}</version>
            </dependency> 
        </dependencies>
    
        <build>
        </build>
    </project>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    
        <parent>
            <groupId>pl.derp</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>shared</artifactId>
        <packaging>jar</packaging>
        <dependencies>
        </dependencies>
            <build>
            </build>
        </project>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    
        <parent>
            <groupId>pl.derp</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>server</artifactId>
        <packaging>jar</packaging>
    
        <properties>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>pl.derp</groupId>
                <artifactId>shared</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    
    
        <build>
        </build>
    </project>
    

    当我改为使用:
    @ProxyForName(“pl.server.GreetingResponse”)
    时,它就可以编译了。请提供帮助。

    您可以使用
    共享
    (和
    客户端
    )依赖于
    服务器
    ,因此您可以从
    @ProxyFor
    @Service
    引用服务器端类;但是,您可能会从共享代码和客户端代码中引用服务器端类,并且只有在使用GWT编译器或devmode时(即较晚)才会注意到这一点,因此使用多模块Maven项目绝对没有好处

    或者您可以使用
    @ProxyForName
    @ServiceName
    ,通过使其隐式化,从
    服务器上的
    共享
    中释放依赖关系;这样一来,
    客户端
    只依赖于
    共享
    ,而不依赖于
    服务器

    您可以在
    modular requestfactory
    Maven原型中看到该方法的一个示例



    BTW,我认为一个<代码>服务器/代码> +>代码>共享< /代码> +>代码>客户端<代码>三重奏是一个单一的“单元”(仅在3个层次中人为划分,以容纳Maven限制WRT依赖范围和类似的),并且我只是让它们共享一个通用的根包。(有或没有

    服务器
    共享
    客户端
    子包)。这样我就可以在
    客户端
    模块中有一个
    *.gwt.xml
    ,将客户端和共享文件都带到gwt的“源路径”中;而
    共享
    模块对gwt没有依赖性(只有
    提供的
    依赖于
    requestfactory客户端
    requestfactory服务器
    客户端
    将使用
    gwt用户
    ,而
    服务器
    将使用
    requestfactory服务器
    gwt servlet
    )。

    您必须尊重maven结构。 在每个模块的pom所在的目录中,必须有/src目录,您必须在其中保存源代码

    Maven在构建模块时查找此目录。 在这里,您可以阅读更多关于此的信息

    但我不建议您更改GWT应用程序的标准结构


    想想那些希望进一步开发您的代码的开发人员。他们会期望标准,而且他们一开始很难理解其结构。

    我将深入研究您的原型。似乎比我的更干净。嘿。我看到您在我试图重写的文件中有
    @ProxyForName
    字符串类声明使用类型安全类声明,如:
    @ProxyFor(value=GreetingResponse.class)
    ,但我失败了,你能帮忙吗?你可以把
    服务器
    分成两部分:一部分是共享的
    服务和域对象
    可以依赖于
    true
    提供的
    (这样,
    client
    就不会继承它;您还可以明确地排除
    client
    中的可传递依赖项);另一部分依赖于第一部分和
    shared
    ,来构建webapp。然后,您将拥有
    webapp
    依赖于
    shared
    client
    (编译为JS)而
    服务器
    共享
    依赖于
    服务器
    客户端
    依赖于
    共享
    ,但不依赖于
    服务器
    。嘿,我试着遵循你的建议。不幸的是,我在使用请求工厂验证工具时遇到了问题?请再次查看我的帖子。我已经更新了我的新POM。谢谢。如果你愿意的话只使用
    @ProxyFor
    @Service
    (或者更一般地说,如果您在代理类的构建时有可用的“域”类),则可以在
    共享
    中使用注释处理器(
    requestfactory-apt
    依赖项必须存在于编译类路径中,在运行时不存在:使用
    提供的
    范围或设置为
    可选
    )而不是验证工具。
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    
      <parent>
        <groupId>com</groupId>
        <artifactId>mrf</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
    
      <artifactId>mrf-shared</artifactId>
    
      <prerequisites>
        <maven>${mavenVersion}</maven>
      </prerequisites>
    
      <dependencies>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>mrf-domain</artifactId>
          <version>${project.version}</version>
        </dependency>
    
    
        <dependency>
          <groupId>com.google.web.bindery</groupId>
          <artifactId>requestfactory-apt</artifactId>
        </dependency>
        <dependency>
          <groupId>com.google.web.bindery</groupId>
          <artifactId>requestfactory-server</artifactId>
        </dependency>
        <dependency>
          <groupId>com.google.web.bindery</groupId>
          <artifactId>requestfactory-client</artifactId>
          <scope>provided</scope>
        </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-source-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </project>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <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>
    
      <parent>
        <groupId>com</groupId>
        <artifactId>mrf</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
    
      <artifactId>mrf-client</artifactId>
      <packaging>gwt-app</packaging>
    
      <prerequisites>
        <maven>${mavenVersion}</maven>
      </prerequisites>
    
      <dependencies>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>mrf-shared</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>mrf-shared</artifactId>
          <version>${project.version}</version>
          <classifier>sources</classifier>
        </dependency>
        <dependency>
          <groupId>com.google.gwt</groupId>
          <artifactId>gwt-user</artifactId>
        </dependency>
        <dependency>
          <groupId>com.google.gwt</groupId>
          <artifactId>gwt-dev</artifactId>
        </dependency>
        <dependency>
          <groupId>com.google.gwt</groupId>
          <artifactId>gwt-codeserver</artifactId>
        </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>net.ltgt.gwt.maven</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <configuration>
              <moduleName>pl.App</moduleName>
              <moduleShortName>mrf</moduleShortName>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    
    [INFO] ------------------------------------------------------------------------
    [INFO] Reactor Summary:
    [INFO] 
    [INFO] mrf ............................................... SUCCESS [0.106s]
    [INFO] mrf-domain ........................................ SUCCESS [0.893s]
    [INFO] mrf-shared ........................................ SUCCESS [0.277s]
    [INFO] mrf-client ........................................ SUCCESS [6.519s]
    [INFO] mrf-server ........................................ FAILURE [0.599s]
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 8.824s
    [INFO] Finished at: Mon Oct 05 13:33:27 CEST 2015
    [INFO] Final Memory: 28M/311M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.2:exec (requestfactory-validation-tool) on project mrf-server: Command execution failed. Process exited with an error: 255 (Exit value: 255) -> [Help 1]
    org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.2:exec (requestfactory-validation-tool) on project mrf-server: Command execution failed.