Maven - 添加源依赖;但 Eclipse 中没有可用于 GWT 编译的 Java 源文件

Posted

技术标签:

【中文标题】Maven - 添加源依赖;但 Eclipse 中没有可用于 GWT 编译的 Java 源文件【英文标题】:Maven - add source dependency; but no java source files available in eclipse for GWT compile 【发布时间】:2011-01-07 23:04:49 【问题描述】:

通常下面的 pom 配置对我有用。我过去成功地将我的 jar 文件的源代码作为依赖项添加到我的项目中?

我有两个这样定义的 jar 文件:

<dependencies>  
  <dependency>  
    <groupId>myGroup</groupId>  
    <artifactId>myJar</artifactId>  
    <version>4.0</version>   
    <type>jar</type>  
    </dependency>    
  <dependency>  
    <groupId>myGroup</groupId>  
    <artifactId>myJar</artifactId>  
    <version>4.0</version>  
    <type>jar</type>  
    <classifier>sources</classifier>  
  </dependency>  
</dependencies>

当我从 Windows 资源管理器视图中打开 myJar-4.0-sources.jar 文件时,我会看到它关联的包中的所有 java 源文件。但是当我在我的 Maven 依赖项中查看我的 Eclipse 项目时,我只看到 xml 文件,而没有看到 myJar-4.0-sources.jar 的 java 文件

顺便说一句,无论我在 eclipse 内部还是外部运行 maven 构建,它都会抱怨没有应该在 myJar-4.0-sources.jar 中找到的类的源代码。

顺便说一句,这是一个 GWT 编译器。

这是实际的错误信息:

[信息] [gwt:编译执行:默认] [INFO] 自动发现的模块 [com.noesis.calendar.events.CalendarEvents] [INFO] 加载继承的模块 'com.noesis.commons.Commons' [INFO] [WARN] 非规范源包:./ [INFO] 编译模块 com.noesis.calendar.events.CalendarEvents [INFO] 验证新编译的单元 [信息] [错误] 'file:/C:/dev/pouncil_projects/calendar-events/src/main/java/com/noesis/calendar/events/shared/model/Calendar 中的错误 事件.java' [INFO] [ERROR] 第 102 行:没有可用于类型 com.noesis.commons.exceptions.CloneException 的源代码;你忘了带她吗 它是必需的模块吗? [信息] [错误] 'jar:file:/C:/Documents%20and%20Settings/Tonte%20Pouncil/.m2/repository/com/noesis/commons/noesis-commons/0.0 中的错误 .1-SNAPSHOT/noesis-commons-0.0.1-SNAPSHOT-sources.jar!/com/noesis/commons/domain/models/core/BaseEntityModel.java' [INFO] [ERROR] 第 27 行:没有可用于类型 com.noesis.commons.exceptions.CloneException 的源代码;你忘了继承吗 t 一个必需的模块? [信息] [错误] 'jar:file:/C:/Documents%20and%20Settings/Tonte%20Pouncil/.m2/repository/com/noesis/commons/noesis-commons/0.0 中的错误 .1-SNAPSHOT/noesis-commons-0.0.1-SNAPSHOT-sources.jar!/com/noesis/commons/domain/models/core/DomainModelException.java' [INFO] [ERROR] 第 6 行:没有可用于类型 com.noesis.commons.exceptions.ApplicationException 的源代码;你忘了我吗 继承一个必需的模块? [INFO] [ERROR] 第 14 行:没有可用于类型 com.noesis.commons.Context 的源代码;您是否忘记继承所需的模块 e? [信息] [错误] 'jar:file:/C:/Documents%20and%20Settings/Tonte%20Pouncil/.m2/repository/com/noesis/commons/noesis-commons/0.0 中的错误 .1-SNAPSHOT/noesis-commons-0.0.1-SNAPSHOT-sources.jar!/com/noesis/commons/domain/models/core/PersistableBaseModel.java' [INFO] [ERROR] 第 70 行:没有可用于类型 com.noesis.commons.calendar.CalendarUtility 的源代码;你忘了继承吗 一个必需的模块? [INFO] [ERROR] 第 84 行:方法 clone() 未定义对象类型 [INFO] [ERROR] 第 91 行:没有可用于类型 com.noesis.commons.exceptions.CloneException 的源代码;你忘了继承吗 t 一个必需的模块? [INFO] 查找入口点类 [信息] [错误] 找不到类型 'com.noesis.calendar.events.client.CalendarEvents' [INFO] [ERROR] 提示:以前的编译器错误可能导致此类型不可用 [INFO] [ERROR] 提示:检查模块的继承链;它可能没有继承所需的模块或模块可能不是 b e 正确添加其源路径条目 [信息] --------------------------------------------- ------------------------- [错误] 构建错误` [INFO] [ERROR] 第 102 行:没有可用于类型 com.noesis.commons.exceptions.CloneException 的源代码;你忘了带她吗 它是必需的模块吗?

有人知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

GWT 在编译后的相同 JAR 中查找依赖源 类文件。由于图书馆尽在您的控制之下 当然是将类文件和源文件包含在 相同的 JAR。为此,将&lt;resource&gt; 添加到&lt;build&gt; 部分 POM(假设标准 Maven 源代码布局):

<project>
  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
      </resource>
    </resources>
  </build>
</project>

【讨论】:

首先让我感谢您的回复。非常感谢! 在我的 pom.xml 中使用资源标签对我不起作用。在这一点上,我不再关心为什么 src 文件没有出现在 Eclipse 的 Maven 依赖关系树中。为了满足 src 和类必须在同一个 jar 中的要求,我使用 maven-assembly-plugin 创建了一个包含源和类的单个 jar。但是,我仍然有与上面相同的错误消息。所以我得出结论,GWT 需要在不在类路径上的其他地方提供源代码。我真的需要帮助解决这个问题。所以任何建议都是好的。谢谢。【参考方案2】:

GWT 在与编译的类文件相同的 JAR 中查找依赖源。您应该在同一个 JAR 中包含类文件和源文件。为此,将 &lt;resource&gt; 添加到 POM 的 &lt;build&gt; 部分:

<project>
  <build>
    <resources>
      <!-- include the source files in our main jar for use by GWT -->
      <resource>
        <directory>$project.build.sourceDirectory</directory>
      </resource>
      <!-- and continue to include our standard resources -->
      <resource>
        <directory>$basedir/src/main/resources</directory>
      </resource>
    </resources>
  </build>
</project>

【讨论】:

【参考方案3】:

我终于发现我的问题是。这是我的 .gwt.xml 文件。它没有正确引用 GWT 类。并不是说我解决了这个问题,我相信我想通过源 jar 文件引用我的源库的原始方式会起作用。谢谢。

【讨论】:

以上是关于Maven - 添加源依赖;但 Eclipse 中没有可用于 GWT 编译的 Java 源文件的主要内容,如果未能解决你的问题,请参考以下文章

eclipse maven 手动添加依赖包时,不会自动搜索怎么办?

Maven添加坐标(依赖)及在Eclipse中的操作

尝试导入maven项目,但导入后eclipse中缺少一些依赖项

在eclipse中添加Twitter Jar文件作为Maven依赖。

Eclipse maven没有添加依赖项

在 Eclipse 中添加 mysql-java 依赖项时出现 maven 问题[关闭]