【问题标题】:How to use DukeScript with Eclipse?如何在 Eclipse 中使用 DukeScript?
【发布时间】:2015-04-19 09:53:18
【问题描述】:

有没有在 Eclipse 中使用 DukeScript 的教程?我只能找到与 NetBeans 一起使用的说明。

【问题讨论】:

    标签: java eclipse html dukescript


    【解决方案1】:

    更新:我写了a short tutorial。请让我知道它是否适合您,以及需要改进的地方。

    【讨论】:

    • 其实这里有一个问题:每次我访问“本机”javascript 方法时,都会得到 java.lang.UnsatisfiedLinkError 异常。每当找不到本机库时,这就是 JNI 的典型错误。 @eppleton 有什么建议吗?
    • 在从命令行重新构建它并从那里执行它之后,它现在以某种方式工作。我正在逐步完成 AbstractFXPresenter.defineJSFn()
    【解决方案2】:

    现在我花了几个小时尝试运行 Dukescript 项目。我不是 NetBeans 用户,而是从 Maven 原型生成了一个项目,然后尝试将其导入 Eclipse。 一个问题是 m2eclipse 被 html4j-maven-plugin 弄糊涂了,它不知道它必须在构建生命周期的哪个阶段运行(据我所知)。所以我添加了这个:

      <pluginManagement>
    <plugins>
      <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
      <plugin>
        <groupId>org.eclipse.m2e</groupId>
        <artifactId>lifecycle-mapping</artifactId>
        <version>1.0.0</version>
        <configuration>
            <lifecycleMappingMetadata>
                <pluginExecutions>
                    <pluginExecution>
                        <pluginExecutionFilter>
                            <groupId>org.netbeans.html</groupId>
                            <artifactId>
                                html4j-maven-plugin
                            </artifactId>
                            <versionRange>[1.1,)</versionRange>
                            <goals>
                                <goal>process-js-annotations</goal>
                            </goals>
                        </pluginExecutionFilter>
                        <action>
                            <execute></execute>
                        </action>
                    </pluginExecution>
                </pluginExecutions>
            </lifecycleMappingMetadata>
        </configuration>
      </plugin>
    </plugins>
    

    现在 m2eclipse 不兼容了。尽管如此,Eclipse 仍然找不到插件生成的数据(模型)类。 所以我简单地添加了 /目标/生成的源/注释 到源文件夹。也许不是最优雅的解决方案,在 pom.xml 中必须有办法做到这一点。 因此,没有编译错误。然而,当我运行它时,我得到了一个异常:

    Exception in thread "main" java.util.ServiceConfigurationError: org.netbeans.html.boot.spi.Fn$Presenter: Provider org.netbeans.html.boot.fx.FXPresenter could not be instantiated
    at java.util.ServiceLoader.fail(ServiceLoader.java:224)
    at java.util.ServiceLoader.access$100(ServiceLoader.java:181)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:377)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
    at net.java.html.boot.BrowserBuilder.showAndWait(BrowserBuilder.java:275)
    at javelin.Main.main(Main.java:14)
    Caused by: java.lang.UnsupportedClassVersionError: javafx/application/Platform : Unsupported major.minor version 52.0
    

    看起来可能是目标字节码和运行时不匹配。 如果我弄明白了,我会更新这个答案。

    更新

    成功!我已将 java 编译源和目标设置为 8

          <configuration>
              <source>1.8</source>
              <target>1.8</target>
          </configuration>
    

    还有 .project 中的 java 运行时

    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
    

    还有最后一件事要做,它是设置“browser.rootdir”属性,以便应用可以找到网络资源。仅用于测试:

    String userdir = System.getProperty("user.dir") + "/src/main/webapp";
    System.setProperty("browser.rootdir", userdir ); 
    

    我现在可以打开页面并启动动画,但由于其他错误而无法停止。无论如何,这是一个开始。

    更新 2

    我已经设法让 Eclipse 处理 DukeScript 注释并使用这个插件生成源代码:m2e-apt。 为了使插件正常工作,还要向 pom 添加一件事:

    <plugin>   
       <groupId>org.bsc.maven</groupId>   
          <artifactId>maven-processor-plugin</artifactId>   
          <version>2.2.4</version>   
          <executions>   
             <execution>   
               <id>process</id>   
                 <goals>   
                   <goal>process</goal>   
                 </goals>   
                 <configuration>
                    <outputDirectory>target/generated-sources/annotations</outputDirectory>
                </configuration> 
              </execution>   
            </executions>   
            <dependencies>   
              <dependency>
                <groupId>org.netbeans.html</groupId>
                <artifactId>html4j-maven-plugin</artifactId>
                <version>${net.java.html.version}</version>
              </dependency>
             </dependencies>   
    </plugin> 
    

    【讨论】:

    • 一个问题:确保在 Maven/Annotation Processing 下选择“Experimental: Delegate Annoation Processing to maven plugin”,因为如果我把它留给 JDT,生成的代码会出错。一个缺点是,如果代码生成由于某些原因失败,Eclipse 是不知道的。这将在运行时显示为本机链接错误。在这种情况下,我必须从命令行使用 Maven 重新编译,这会失败并在出现问题时显示错误
    • 将 Java 源和目标设置为 1.8 并不是绝对必要的,但它必须与运行 Eclipse 的内容相匹配,因此如果将其设置为 1.7,m2e 会以某种方式将项目设置为使用 jre7 库运行。取决于您运行 Eclipse 的方式。我用 jre8 运行它,所以我不得不手动切换项目以使用与 Eclipse 匹配的运行时,或者我必须将项目目标设置为 1.8。如果以 Android 为目标,这将是一个问题
    • 我刚刚尝试了新的 Eclipse Mars 版本。它仍然有效。确保使用 JDK 发行版而不是 JRE 启动 Eclipse,因为 Maven 注释处理器需要 tools.jar。在 eclipse.ini 的顶部添加,例如 -vm C:\Program Files\Java\jdk1.8.0_45\bin
    【解决方案3】:

    这些问题与usability review 期间提出的问题类似。 解决此类编译错误的方法是切换到命令行并执行正常工作的“mvn clean install”。在某种程度上配置 Eclipse is possible,您似乎找到了正确的方法。

    【讨论】:

    • 在尝试让插件与 Eclipse 一起工作时,我遇到了各种奇怪的情况。我不清楚 javascript 代码会发生什么,有时会创建 META-INF 下的文件,但这会破坏一些东西。此外,代码生成器在某些情况下会生成损坏的代码,不知道为什么。整个 Maven 阶段/目标生命周期对我来说有点神秘。我看看能不能把示例项目放到 GitHub 上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2011-01-19
    • 2017-01-12
    • 2016-08-24
    • 2016-08-11
    • 2016-04-28
    • 2011-11-10
    相关资源
    最近更新 更多