【问题标题】:gwt 2.3 gwt-servlet-deps.jar from Ant Ivy build来自 Ant Ivy 构建的 gwt 2.3 gwt-servlet-deps.jar
【发布时间】:2011-05-05 18:50:24
【问题描述】:

我正在尝试使用 Ant Ivy 构建在 DevMode 下工作的简单 GWT 2.3 项目。我在 2.3 之前的 GWT 项目(特别是 GWT 2.0.x)中使用了 Ivy,并且过去的以下依赖项(在我的 Ivy 模块 xml 文件中)对我有用:(我已经删除了我的 Ivy 配置的特定名称,并将它们显示为下面的“...”。)

<dependency org="com.google.gwt" name="gwt-dev" rev="2.3.0" conf="..." />
<dependency org="com.google.gwt" name="gwt-servlet" rev="2.3.0" conf="..." />
<dependency org="com.google.gwt" name="gwt-user" rev="2.3.0" conf="..." />

但是,我的 gwt-compile(当调用 GWT 的 Java-to-Javascript 编译器时)在 GWT 2.3 下使用上述方法失败。特别是,有几个类似于以下的错误:

[java] [ERROR] Errors in 'jar:file:/../gwt-user-2.3.0.jar!/com/google/gwt/editor/client/EditorDriver.java'
[java] [ERROR] Line 97: No source code is available for type javax.validation.ConstraintViolation<T>; did you forget to inherit a required module?

在线搜索可能相关的参考资料后,我发现threads like this one 在从源代码构建 2.3 候选版本时遇到了类似问题。这些线程 frequently mentiongwt-servlet-deps.jar 需要包含在编译类路径中,这似乎是 GWT 问题跟踪系统中围绕 this issue 的劳动成果。

当然,对于 Ivy,它与我所看到的建议并不完全相同。上述&lt;dependency... 规则似乎不会下载gwt-servlet-deps.jar(与下载GWT 的官方发行版相反,其中可以找到该jar 的特殊副本)。

所以我推断在常春藤世界中我可能需要添加如下内容:

<dependency org="javax.validation" name="validation-api" rev="1.0.0.GA" conf="..."/>

...我认为即使有这个想法我也很糟糕(我似乎是常春藤和 Maven 世界的永久新手)但是,唉,我仍然遇到同样的错误。

显然,Java-to-Javascript 编译器想要源代码,而不仅仅是字节码 jar,但我不知道如何告诉 Ivy 去获取它们。我觉得我很接近了,因为我找到了this thread,它显示了一个将两个验证 jar 复制到 lib(字节码和源代码)中的 Ant 任务,但我需要一些帮助来连接 Ivy 世界的各个点。

我将如何告诉 Ivy 获取源 jar?

【问题讨论】:

    标签: gwt ant maven ivy bean-validation


    【解决方案1】:
    <?xml version="1.0" encoding="UTF-8"?> 
    <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" 
    xmlns:m="http://ant.apache.org/ivy/maven"> 
    
    <dependency org="javax.validation" name="validation-api" rev="1.0.0.GA"> 
    <artifact name="validation-api"/> 
    <artifact name="validation-api" m:classifier="sources"/> 
    </dependency> 
    

    来源:http://groups.google.com/group/google-web-toolkit/browse_thread/thread/4744e62fb088ba60?pli=1

    感谢 Filipe Sousa

    【讨论】:

    • 你能重现 Filipe 的结果吗?我试过了,我得到了一个错误:impossible to ivy retrieve: java.lang.RuntimeException: problem during retrieve Multiple artifacts of the module javax.validation#validation-api;1.0.0.GA are retrieved to the same file! Update the retrieve pattern to fix this error.我不确定在这种情况下他们所说的“检索模式”是什么意思。
    • 我想你给了我我需要的支持。经过一番阅读和实验,我发现我需要在驱动 Ivy 的 Ant 构建文件中修改 ivy:retrieve 元素的 pattern 属性上的模式。特别是,我需要在末尾添加括号分类器位:&lt;ivy:retrieve pattern="${lib.dir}/[conf]/[artifact]-[revision](-[classifier]).[ext]" /&gt;
    【解决方案2】:

    如果存储库是常春藤存储库(用于工件的 ivy.xml 文件),此答案可能会有所帮助:

    您需要指定验证 api 的 conf,其中包括源代码。

    <dependency org="javax.validation" name="validation-api" rev="1.0.0.GA" conf="compile->sources"/>
    

    其中 compile 是您的本地配置,而 sources 是带有源的 jar 的配置。

    validation-api 的 ivy.xml 必须是这样的(我不知道它在您的存储库中是什么样子):

    <configurations>
        <conf name="compile" visibility="public"/>
        <conf name="source" visibility="public"/>
    </configurations>
    <publications>
       <artifact name="validation-api" type="jar" conf="compile" ext="jar"/>
       <artifact name="validation-api-src" type="jar" conf="source" ext="jar"/>
    </publications>
    

    这会告诉 ivy 有两个可用的验证 api 罐子。一个普通的(编译)和一个特殊的(带有源代码)。而且您必须指定要检索的 conf。

    【讨论】:

    • 有趣。我不认为publications 元素是我在常春藤模块文件中看到的任何东西。 visibility="public" 是您解决方案的基本要素吗?
    • 在阅读了关于发布标签here 并注意到它说用于描述此模块发布的工件后,我感到困惑:我不是验证 API 常春藤模块。你是在暗示这是他们必须做的事情吗?
    • 如果你的存储库包含 ivy 工件,ivy.xml 应该包含这样的信息。但如果它是一个 Maven 存储库,那么其他答案可能是最好的方法;)
    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多