我在Eclipse 3.4中有一个GWT 1.6项目,我试图在我的工作区中引用另一个(非GWT )项目的源代码。我已将项目添加到构建路径,但我无法在托管模式下运行该应用程序。当我这样做时,我得到一个“没有源代码可用”的错误。
我已经做了一些搜索和阅读,并尝试了其他人建议的一些事情(包括从依赖项目创建一个jar并链接到它),但坦率地说没有任何效果。
如果您实际上是这样做的,请您通过简单的逐步设置帮助我吗?我真的很感激,谢谢!
答案 0 :(得分:16)
我有2个Eclipse项目。一个是gwt项目,一个不是。这是适用于我的目录结构:
workspace
-- gwt-project
-- src/main/java
-- com.gwt.GwtProjectModule
-- GwtProjectModule.gwt.xml
-- non-gwt-project
-- src/main/java
-- com.nongwt.package.that.contains.source.you.need
-- nongwt.gwt.xml
-- com.nongwt.package.that.contains.source.you.need.client
nongwt.gwt.xml告诉gwt查看“client”包,这里是它的样子:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module rename-to='nongwt'>
<inherits name='com.google.gwt.user.User' />
<source path="client" />
</module>
然后,GwtProjectModule.gwt.xml可以从nongwt继承源代码。这是GwtProjectModule.gwt.xml里面的相关行:
<inherits name="com.nongwt.package.that.contains.source.you.need.nongwt" />
确保在eclipse中的gwt-project的类路径中包含非gwt-project。这是正常的训练;右键单击gwt-project,选择属性,选择“Java Build Path”,单击“Projects”选项卡,然后选择“non-gwt-project”
或者,不是将非gwt-project包含在gwt-project的类路径中作为项目引用,也可以将非gwt项目的内容包装起来,确保在jar中包含源代码,然后包括gwt-project的类路径中的jar。
祝你好运!
答案 1 :(得分:3)
我知道这篇文章已经很老了,但是由于我在这个问题上花了很多时间,终于找到了实现这个目标的方法,我想我可能会分享答案:
创建启动配置后,打开运行&gt;运行配置... 转到classpath选项卡并选择用户条目。添加高级&gt;文件夹,然后选择其他模块项目的源文件夹。如果我在src / main / resources文件夹中将模块conf文件分开,你也必须添加它。
应该有效。
答案 2 :(得分:1)
GWT项目中的客户端代码(客户端包下的类)不能引用任何不在GWT模块中的类。
如果您希望从GWT项目中的客户端代码引用另一个项目中的代码,则需要:
&lt; inherits name ='com.yourCompany.otherProject.MyOtherProject'/&gt;
答案 3 :(得分:1)
Boden:将以下内容添加到您的模块文件
<source path=""></source>
除了您的其他来源,例如:
<source path=""></source>
<source path="com.acme.otherpackage"></source>
然后编译器不会抱怨。
至少我是如何解决它的。不确定使用path =“”是否允许包含所有内容,我假设它在没有指定源时是默认值。
答案 4 :(得分:1)
这是Sven Buschbeck提出的问题的绝佳解决方案(必须是挪威语,哈哈!),对我有用!
当处理几个大型项目(在Eclipse中)时,通过公共库共享和重用代码会更方便,当然也更有效。虽然它们处于早期阶段,但它们需要进行大量更改,因此,每次更新库时,链接项目而不是创建新的jar都很方便。 遗憾的是,这种用于Eclipse中Java开发的标准方法并不像普通的旧Java项目那样直接工作,它总共需要三个步骤:
通过链接源文件夹将代码添加到项目中。 不幸的是,如果您不想编写Ant,则需要这样做 用于编译应用程序的脚本。 (如果您更喜欢Ant检查 这个)我不喜欢使用这样的脚本的想法,因为如果 你每次做出改变都忘记运行它,你最终会进入 混淆 - 让我们去方便,自动的方式。
将文件夹添加到您的应用程序项目中;打开文件夹创建对话框中的“高级”部分,选择“链接到备用位置”并选择库项目的源文件夹(通常为“src”)。 (提示:如果你在使用版本控制系统的团队中工作,你可以为该文件夹创建一个变量并使用它。这样,你的每个同事都可以将库项目放在不同的文件夹中,并通过调整变量:))
右键单击文件夹“Build Path” - &gt; “用作源文件夹”。完成。 令人惊讶的是,Eclipse的GWT插件不支持项目链接,因此所有引用都需要明确,否则最终将会出现以下大量内容:ClassNotFoundException。
答案 5 :(得分:0)
GWT不知道其他代码,因为它不在您项目的客户端目录中。您需要将其他代码的源路径添加到.gwt.xml文件中。只需将其添加到xml中,如下所示
<source path="common" />
common 是此示例的额外代码所在的目录。
查看此doc
的 XML元素参考部分答案 6 :(得分:0)
在您的gwt项目中,转到属性,Java构建路径,源,单击“链接源”并指向您希望包含的非gwt项目源包。
答案 7 :(得分:0)
编辑:找到了一个eclipse修复程序。运行配置&gt;类路径&gt;高级&gt;添加文件夹&gt; otherproject / src。
原因:Eclipse添加了导出项目的bin文件夹。 GWT需要src文件夹。
阐述我的评论。
我在Eclipse Neon,Java 1.8.0_92上使用gwt 2.8。引用eclipse中的另一个项目无法启动devmode,因为它无法从其他项目中找到引用文件的源。
什么有效:
完全切换到'ant devmode'。对build.xml进行了以下更改:
<target name="gwtc" ...>
<java ...>
<classpath>
<pathelement location="src"/>
<pathelement location="../otherproject/src"/><!-- Added -->
...
...
<target name="devmode" ...>
<java ...>
<classpath>
<pathelement location="src"/>
<pathelement location="../otherproject/src"/><!-- Added -->
现在使用'ant'进行生成构建或使用'ant devmode'启动devmode。
我注意到的其他事情
使用接受的答案中的方法,拾取otherproject / src / foo.gwt.xml(如果不可用则抱怨),并拾取类中的静态值。没有别的。非常奇怪。
据我所知,DevMode / gwtc可执行文件从类路径中获取源代码。因此,所需要的只是让eclipse将引用的项目添加到它们的类路径中。我无法做到这一点,但这似乎是可能的。固定见顶部。