Eclipse 3.4 GWT 1.6项目 - 如何从其他项目中引用源代码?

时间:2009-06-04 17:20:04

标签: eclipse gwt

我在Eclipse 3.4中有一个GWT 1.6项目,我试图在我的工作区中引用另一个(非GWT )项目的源代码。我已将项目添加到构建路径,但我无法在托管模式下运行该应用程序。当我这样做时,我得到一个“没有源代码可用”的错误。

我已经做了一些搜索和阅读,并尝试了其他人建议的一些事情(包括从依赖项目创建一个jar并链接到它),但坦率地说没有任何效果。

如果您实际上是这样做的,请您通过简单的逐步设置帮助我吗?我真的很感激,谢谢!

8 个答案:

答案 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项目中的客户端代码引用另一个项目中的代码,则需要:

  • 确保它全部是“GWT安全”,这意味着它不引用任何未由GWT(http://code.google.com/webtoolkit/doc/1.6/RefJreEmulation.html)模拟的JRE类,或引用任何引用未模拟的JRE类的类
  • 确保所有引用的类都在GWT模块中。这意味着将MyOtherProject.gwt.xml文件放在您的其他项目中,并且所有引用的类必须位于客户端子包下
  • 让您的GWT项目继承自其他项目。因此,将以下内容添加到GWT项目的gwt.xml模块文件中:
  

&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项目那样直接工作,它总共需要三个步骤:

  1. 将图书馆项目链接到所有相关项目(“项目” 偏好“ - &gt; “Java构建路径” - &gt; “项目” - &gt; “添加...”)
  2. 然后,添加库的客户端代码(通过将其添加为 模块。)因此,编辑应用程序的gwt.xml并添加 例如 其中SuperLib是您库中gwt.xml文件的文件名 项目之前是它所在的包。
  3. 通过链接源文件夹将代码添加到项目中。 不幸的是,如果您不想编写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。

我注意到的其他事情

  1. 使用接受的答案中的方法,拾取otherproject / src / foo.gwt.xml(如果不可用则抱怨),并拾取类中的静态值。没有别的。非常奇怪。

  2. 据我所知,DevMode / gwtc可执行文件从类路径中获取源代码。因此,所需要的只是让eclipse将引用的项目添加到它们的类路径中。我无法做到这一点,但这似乎是可能的。固定见顶部。