有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaMaven和GWT(以及Eclipse)它真的能工作吗?

在过去的几天里,我一直在尝试使用GWTMaven插件在Eclipse中创建/运行一个项目,并不断遇到障碍(请参阅我前面的一些问题)。我喜欢使用Maven进行构建,但由于使用Maven的复杂性,我正考虑采用Ant构建路线

是否有人对其进行了配置/工作正常?是我一个人干的,还是这件事比应该做的更难


共 (5) 个答案

  1. # 1 楼答案

    是的,2016年确实如此,非常不错。:)

    我从Eclipse中启动Tomcat,从Eclipse中启动GWTCodeServer(SuperDev模式),从Eclipse中启动Chrome

    您将在Brandon Donnelson的YouTube频道:https://www.youtube.com/user/branflake2267/videos上找到非常新且非常有价值的设置教程

    对我来说最重要的是GWT SuperDevMode的Eclipse调试器https://sdbg.github.io/

    我更喜欢让我的项目“mavenized”,Brandon也提供了很多Maven原型

    下载GPE插件(不要与上述调试器插件混淆)的官方起点(不仅仅是)是GwtProject。comhttp://www.gwtproject.org/download.html
    就我个人而言,GPE本身已成为相当可选的“便利”组件。(是的,重构和自动完成很好,但这就是它所需要的一切。)

    这不是一个一键式的解决方案,我更喜欢这样,因为那些往往是容易打破的黑匣子

    顺便说一句,一定要看一下GWT材料:http://gwtmaterialdesign.github.io/gwt-material-demo/

    (目前正在使用2.8-beta1。)

  2. # 2 楼答案

    无论它是如何可能的,它都比它应该的更难。这里发布的所有提示都可以实现这一目的。但是,仍然可能存在类加载问题。我决定切换到GWT2.1并使用JettyLancher的新功能。您可以创建自己的jetty启动器,如下所示:

    public class MyJettyLauncher extends com.google.gwt.dev.shell.jetty.JettyLauncher {
      @Override
      protected WebAppContext createWebAppContext(TreeLogger logger, File appRootDir) {
        return new WebAppContext(appRootDir.getAbsolutePath(), "/");
      }
    }
    

    然后将-server MyJettyLauncher选项添加到gwt启动程序配置中。通过这种配置,所有库都由m2eclipse管理(您甚至可以从类路径中删除GWTSDK),并且不需要将任何内容复制到WEB-INF/lib(您可以删除可能已经存在的gwt-servlet.jar

    Ready launcher位于tadedon库中: http://code.google.com/p/tadedon/source/browse/tadedon-gwt-dev/src/main/java/com/xemantic/tadedon/gwt/dev/JettyLauncher.java

  3. # 3 楼答案

    在经历了很多挫折后,我试图让事情顺利进行,这是我的设置,对我来说“有效”。“工作”意味着我可以通过调整创建、运行和调试GWT项目,但这不是最优雅的解决方案

    创建项目

    许多步骤与Pascal在本文中的答案相同:Maven GWT 2.0 and Eclipse。我会把我的列出来以示澄清

    在安装了m2eclipse和GWT Eclipse插件的Eclipse(Helios)中:

    使用GWTMaven插件原型创建一个新的Maven项目

    修改pom。xml:

    • <gwt.version property>设置为2.0.4 (需要与GWT Eclipse相同 插件版本)
    • 设置<maven.compiler.source><maven.compiler.target>属性到 1.6
    • 删除<goal>generateAsync</goal> 来自gwt maven插件<plugin>配置
    • 将maven war插件添加到pom。xml

    maven war插件示例:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
        <warSourceDirectory>war</warSourceDirectory>
            <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
        </configuration>
    </plugin>
    

    更新项目属性:

    • 谷歌->;Web Toolkit,选中“使用Google Web Toolkit”框,并确保选中“使用默认SDK(GWT-2.0.4)”

    在项目上运行Maven“gwt:eclipse”目标(设置环境和启动配置)

    复制*。将文件启动到工作区。元数据。插件\组织。日食调试。果心发射

    重新启动Eclipse

    编译/运行项目

    我创建了一个执行mvn clean compile gwt:run的运行配置。gwt:run是将资源和lib jar复制到war目录中所必需的。但是,它不会复制web。xml从src/main/webapp/WEB-INF转换为war/WEB-INF/。因此,我必须手动复制该文件

    如果我想运行我的应用程序,以上步骤就足够了。但是,如果我想调试应用程序,我可以通过从调试配置中选择Google“Web应用程序”配置来启动它,调试配置是在启动应用程序时创建的。启动文件以前已复制。此配置允许调试(断点等),而无需任何其他配置或远程调试

  4. # 4 楼答案

    对于Eclipse,我使用:m2eclipse插件(1.0)。它能很好地处理一两件小事。还可以下载M2EclipseExtras插件来添加SVN功能和Maven(或者CVS,如果您愿意的话)

    当您下载项目时,它会读取pom。xml和[re]创建Eclipse配置文件,如mvn Eclipse:Eclipse命令

    对于GWT。。。我也用过。这是一个非常复杂的配置,但它可以工作。我使用GWT2.0.3,maven GWT插件使用依赖项工作(不参考GWT SDK),它可以从Eclipse进行调试,这非常好

    您必须编译到war目录(而不是目标/类标准)。但是细节在我的工作中,所以让我明天看看并完成这个答案:)不要放弃。拥有GWT+Eclipse+Maven是件好事

    编辑:我的配置的一部分

    <build>...
    <outputDirectory>war/WEB-INF/classes</outputDirectory>
    ...
    </build>
    
    
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>1.2</version>
                <configuration>
                    <gwtVersion>${gwt.version}</gwtVersion> <!-- para forzar que use el de maven y no el SDK instalado -->
                    <disableCastChecking>true</disableCastChecking>
                    <disableClassMetadata>true</disableClassMetadata>
                    <runTarget>/subscriber/listSubscribers.htm</runTarget>
                    <webappDirectory>${basedir}/war</webappDirectory>
                    <soyc>true</soyc>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    
    
                        <!-- dont know/remember if the jetty inside the gwt uses this... but it doesnt hurt-->
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.14</version>
                <configuration>
                            <webAppConfig>
                            <contextPath>/magazine</contextPath>
                            <baseResource implementation="org.mortbay.resource.ResourceCollection">
                            <resourcesAsCSV>
                                    ${basedir}/src/main/webapp,
                                    ${basedir}/war
                                </resourcesAsCSV>
                            </baseResource>
                    </webAppConfig>
                    <connectors>
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>8888</port>
                            <maxIdleTime>60000</maxIdleTime>
                        </connector>
                    </connectors>
                    <scanIntervalSeconds>3</scanIntervalSeconds>
                    <scanTargets>
                        <scanTarget>${basedir}/war</scanTarget>
                    </scanTargets>                  
                </configuration>
            </plugin>
    

    为了进行调试,我创建了两个任务:

    1)maven在eclipse内部构建,运行两个目标:war:exploded gwt:debug

    • 第一个将所有资源复制到war目录中,供gwt调试使用
    • 接下来,gwt准备就绪

    也许您需要第一次执行gwt:compile

    2)Java远程应用程序调试配置,选择项目

    当gwt:debug为“侦听端口8000”时运行此配置

    :这是在父pom中。xml(很抱歉,稍后我将编辑此帖子:)

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1-alpha-2</version>
                <configuration>
                    <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
                    <webappDirectory>${basedir}/war</webappDirectory>
                    <warName>${artifactId}</warName>
                </configuration>
            </plugin>
    
  5. # 5 楼答案

    赫利奥斯写了很好的解释。但目前还不是真的。所以我建议你试试我的现代风格