我要找的处理混合项目类型之间的相互依存关系项目的最佳实践,其中一些项目是Eclipse插件/ OSGi包项目(RCP应用程序)等人都只是普通的旧Java项目(Web服务模块)。 几个Eclipse插件的对Java项目的依赖关系。
我的问题是,至少就我看,不存在在Eclipse PDE环境干净表达这种依赖的方式。 我可以有插件项目依赖于其它插件项目(通过Import-Package
或Require-Bundle
清单头),但不是普通的Java项目。
我似乎能有项目申报从工作区中的另一个项目罐子的依赖,但这些jar文件不要被既不出口也不启动配置回升(虽然,java代码编辑看到库就好了)。
在“Java项目”用于构建服务被部署在J2EE容器(JBoss的4.2.2的时刻)上,并在某些情况下,多个罐子的产生 - 一个用于部署到JBoss的耳朵,另一个是由客户端代码使用(1个RCP应用程序)。
我们一直的方式“解决”这个问题现在是我们有2点外部工具启动的配置 - 一个用于构建所有的jar的,另一个用于复制这些罐子的的插件项目。 这工作(那种),但“整个建造”和“副本罐子”的目标承担相当大的构建步骤,绕过整个日食增量生成功能,并通过复制的罐子,而不是只引用的项目,我去耦依赖信息并要求相当巨大的工作空间刷新吃掉了开发时间,就像是糖果。
我想有一个更“自然”的空间设置,将管理项目,并要求增量之间的依赖关系重建只在需要的时候,能够使用从服务库客户端代码在RCP应用程序插件,并能发动所有需要的地方必要的类RCP应用程序。
所以我可以有我的蛋糕和熊掌兼得;)
注意
需要明确的是,这是不是这么多的依赖管理和模块管理的时刻,因为它是关于Eclipse的PDE配置。
我很清楚的产品,如[Maven的],[常青藤]和[巴克明斯特]他们解决一个完全不同的问题(一旦我解决了工作空间配置问题,这些产品实际上可以派上用场的具体化工作空间和构建产品)
Answer 1:
我从来没那么做,所以这是一个理论方法。 但我想尝试的依赖关系管理系统,如常春藤或Maven2的。
由于maven2的做得更多,那么就依赖管理,我建议常春藤在这种情况下。
Answer 2:
Eclipse项目凭借在项目的属性复选框(取决于项目?),这是Eclipse如何决定其建立的互相依赖。 您可以设置这个自己,但是当你改变你的Java构建路径它通常设置。 它存储在项目文件IIRC数据,以便一旦你通过GUI了,看到什么样的变化,你可以在你如何运用其他更灵活。
然而,这听起来像你想混搭罐和捆绑。 最简单的方式做到这一点就是把所有的项目,Java项目。 在PDE项目,实际上你可以去和调整Java构建路径; 它会抱怨,说这是不这样做的正确的方式,但它可以让你有一个PDE项目依赖于Java项目没有全部蓬松JARING起来。 话虽如此,如果有运行时的问题这种方法不会让我感到吃惊 - 的PDE运行时很可能不这么认为。
另一种方法是使你的JAR自己PDE / OSGi包。 毕竟,一个OSGi包无非是与清单一点额外的克鲁夫特的JAR多了,它会让你开发和平凡使用自动依赖管理组装您的项目。 这可能是最简单的一个去,即使你并不真正需要的清单存在于你的包。 但这样做,这将意味着你的PDE应用程序可以用更模块化的方法,而不是根据需要嵌入在每个插件库发货。
因此,PDE可以生成OSGi包,这是对JAR +舱单的东西只是一个名字。 您可以准确地在其他环境中以同样的方式使用JAR(如您的EAR或其他客户端使用),你可以利用的OSGi层的在您的应用程序。 还有的实在没有理由不这样做因为你在谈论混合包的类型。
Answer 3:
我们的解决方案使用Ant构建以“类”普通Java项目的目录直接复制到插件项目的顶级目录。 我们跳过JAR构建步骤,以节省时间,它工作得很好。 如果插件项目依赖于外部的JAR that're已经建成,我们复制这些太。
下面是如何正确地设置它在Eclipse 3.5(抱歉奇格式,但是这是我能找到保存缩进的唯一途径):
Create empty "classes" dir in plugin project Select plugin project, hit F5 to refresh resources Create new Ant build file in plugin project to copy dependencies (ours is shown below) Right-click plugin project, select Properties Select Builders Click "New..." (brings up Edit Configuration dialog) Select Ant Builder and click "OK" Name your builder (ours is called "PluginProject externals") Browse workspace for Buildfile (ours is ${workspace_loc:/PluginProject/copyDependencies.xml}) click Refresh tab check "Refresh resources upon completion", click "Specific resources" click "Specify Resources...", check box for the classes dir, click "Finish" Click "OK" (closes Edit Configuration dialog) Click "Up" to move "PluginProject externals" to top of builder list Click "OK" (closes Properties dialog) Open your plugin project's MANIFEST.MF Click "Runtime" tab Click "Add..." under "Classpath", select your the "classes" dir and JARs and click "OK"
手动创建的插件项目空“类”目录中是如此,你可以告诉你的新建设者刷新该资源(在运行新的构建器之前其尚不存在)。 下面是在我们的copyDependencies.xml文件:
<project name="Copy dependencies" default="copyDependencies" basedir=".">
<!--
This copying is needed because it appears that Eclipse plugins can't
depend directly on external Eclipse projects.
-->
<description>
Copies external dependency class andd JAR files into this plugin's directory.
</description>
<target name="copyDependencies">
<copy file="../External/JDOM/jdom-1.0/build/jdom.jar" todir="." preservelastmodified="true"/>
<copy file="../External/Xalan/xalan-j_2_6_0/bin/xalan.jar" todir="." preservelastmodified="true"/>
<copy file="../External/Xalan/xalan-j_2_6_0/bin/xercesImpl.jar" todir="." preservelastmodified="true"/>
<copy file="../External/Xalan/xalan-j_2_6_0/bin/xml-apis.jar" todir="." preservelastmodified="true"/>
<copy todir="./classes/com/arm" preservelastmodified="true">
<fileset dir="../Utilities/src/com/arm" excludes="**/*.java"/>
</copy>
</target>
<target name="clean" description="Deletes local copies of external classes and JARs.">
<delete file="jdom.jar" quiet="true"/>
<delete file="xalan.jar" quiet="true"/>
<delete file="xercesImpl.jar" quiet="true"/>
<delete file="xml-apis.jar" quiet="true"/>
<delete dir="./classes/com/arm/utilities" quiet="true"/>
</target>
</project>
唯一的缺点这种方法似乎是Eclipse是不是100%完美的有关调用外部建造时需要调用它,所以偶尔你必须做一个“项目>清洁...”在Eclipse中沿着迫使它。
Answer 4:
你有我的同情。 如何声明从插件依赖于一个普通的Java项目(例如,它工作在运行时):我也有从这样一个简单的,明显的问题Eclipse的开发者这一问题,并在墙的静默作战?
我不认为他们支持。 香港专业教育学院解决该问题得到的唯一方法是创建我的插件项目里面那个实际上是链接到Java项目的bin /文件夹,然后包括这些文件到插件文件夹中。 这至少工作,但由于需要绝对的文件系统路径的脆。
Answer 5:
也许你可以使用“项目属性” - 基于Eclipse>“部署大会”,并添加其他项目到您的主项目。 其他项目正在看到这样的自动添加到您的部署文件(战争,耳朵或其他)“罐子”。 也许这可能是作品。 至少它为我工作。 祝好运 !!
Ariesandes。
Answer 6:
有一个在构建路径属性“链接源”选项,允许您定义额外的源文件夹的项目。 您可以选择其他工作区项目的“SRC”文件夹,重命名为“SRC2”或任何你想要的。 这样,类被编译并部署到插件项目输出文件夹,可以在运行时加载。
Answer 7:
随着一组复杂的依赖关系,我发现在Maven2和Hudson(对于CI)是一个相当不错的组合。 过了一段时间来建立基础设施,并让我的周围配置的头,但在那之后,它只是工作。
当然,你是依赖然后在Maven2(或哈德森)为您构建机制的支持。 我不知道如何无头Eclipse的版本是支持的。 但是,如果你正在使用Eclipse无头的唯一原因是为了让依赖关系在一个地方来表达,请你帮个忙和开关。
Answer 8:
我有完全相同的问题。 我们有一组可通过Maven的建立和应(目前)都有着相同的类路径正常工作多普通Java项目。 这些项目可以用来启动在非OSGi环境的服务器。 然后,我们也有一个Eclipse RCP的客户端,使用这些项目作为一个包。 我完全能够建立这个一大束与使用Apache Maven的菲利克斯捆绑插件,一切工作正常的Maven。 但每当我在正常的项目改变一个I类必须重建整个包。 增量构建和资源连接不工作。
我尝试了“解决方案”从这些项目的链接二进制文件/源目录到一大束的清单类路径,它似乎工作,但它会是一个真正维护的噩梦,因为我甚至将某些单独的文件。
因为在客户端其实我想我们的倒塌不错,模块化结构与Maven模块到只有一个插件项目子包的使用的OSGi的那么具有讽刺意味。 这比极为缓慢发展一个更好的选择。
其他更好的替代方案(根据OSGi的家伙),我会先调查是让我所有的Maven模块为OSGi包。 但是,这可能是一个真正的PITA因为我取决于类路径扫描和合并多个配置文件从几束(与有时相同的名称),以形成一种结构。
(具体来说,我们使用Spring框架和我们合并多的persistence.xml文件合并成一个持久化上下文。我们也合并来自不同模块的几个春天XML上下文文件(所有人提供一个不同的方面)应该一起形成一个Spring上下文由弹簧配合使用-DM)。
文章来源: How to express inter project dependencies in Eclipse PDE