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。为此,将<resource>
添加到<build>
部分
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 中包含类文件和源文件。为此,将 <resource>
添加到 POM 的 <build>
部分:
<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中缺少一些依赖项