我是CM,负责我们的持续构建过程,并帮助开发人员正确定义和使用构建。我尝试以这样的方式进行设置,即开发人员只需从Source控制系统下载模块,然后输入ant
或maven
并让一切正常。
在Ant项目中,我要么使用ivy
,要么拥有包含所需第三方jar文件的lib
目录。这有助于我清楚地定义所有依赖项,并使开发人员可以轻松地在其系统上构建模块。是的,有一些依赖于正确的JDK版本,有些依赖于正确的Ant版本,但即使这些也有点灵活。除了Ecipse和Jenkins / Hudson之外,您还可以定义要使用的确切JDK和Ant版本。
问题是这个项目依赖于Weblogic 10.3(又名11g)。在Weblogic 10之前,你几乎可以使用weblogic.jar文件,也可能只使用一两个其他jar。从Weblogic 10开始,罐子现在“模块化”。
当我进行构建时,我仍然只是在我的类路径中包含weblogic.jar
。但是,weblogic.jar
文件中的MANIFEST.MF
包含对..\..\..\modules\features
目录的引用(实际上是包含Weblogic 10.3的父目录!)。这里是不包含类路径的jar,但是它们自己在MANIFEST.MF
中嵌入了一个指向其他jar的Classpath。这些反过来可以指其他罐子。
我想我有以下选择之一:
这些选项现在都没有真正吸引我。
正如其他人指出的那样,我可以尝试找到各种罐子,而我用Weblogic 9.x和早期版本就是这么做的。例如,一个简单的shell脚本:
find $WEBLOGIC_HOME -name "*.jar" | while read jar
do
echo "JAR NAME = jar"
jar tvf $jar
done | less
将在我的终端上显示所有Weblogic JAR的内容。如果我在构建中发现缺少javax.servlet.ServletException
类,我可以搜索javax\servlet\ServletException.class
,然后返回搜索JAR NAME =
并找到jar的名称。
然而,在Weblogic 10中,我发现我依赖于javax.servlet.ServletException
,并将其追溯到C:\bea\modules\javax.servlet_1.0.0.0.0.jar
,这甚至不在我的$WEBLOGIC_HOME
目录中。这是因为C:\bea\wlserver_10.3\server\lib\weblogic.jar
包含..\..\..\modules\features\somejar.jar
的类路径。 somejar.jar
不包含任何类。相反,它包含对其类路径中另一个jar的引用,然后引用javax.servlet_1.0.0.0.0.jar
。
所以,我现在必须添加四个罐子,其中一个不包含任何类,如果我想模仿Weblogic的结构,我必须在lib
目录中包含以下文件:< / p>
weblogic.lib\wlserver_10.3\server\lib\weblogic.jar
weblogic.lib\modules\features\somejar.jar
weblogic.lib\modules\someOtherJar.jar
weblogic.lib\modules\javax.servlet_1.0.0.0.0.jar
好的,这只需要大约2个小时才能解决。一个依赖性问题,还有43个要去。
正如您所看到的,这可能需要数天,甚至数周才能完成,并最终在我的......呃...... minimal Weblogic 10模块中使用了几十个罐子。最后,这个 minimal 模块可能不会那么小。
有没有人知道可能有一些文档可以让我快速确定这些依赖项存在的位置,或者构建依赖树的方法,这样当我需要classpath com.bea.weblogic.foo.bar.barfoo时,我可以很快看到我需要这些7或8罐?
答案 0 :(得分:1)
我想你不需要整个700MB的包。所以你可以(是的,这是一些工作要做)构建你自己的“weblogic-ivy”文件,它描述了构建和测试的最小jar-set。 将该文件发布到您的公司仓库并在您的依赖项conf中使用它,您和您的开发人员可以使用最小的conf,它不应该比其他app-server-client软件包大得多。
答案 1 :(得分:1)
我放弃了。我只是安装了Weblogic 10并检查了build.xml
已设置的$WEBLOGIC_HOME
。