1

I have read through the documentation on the jenkins page as well as a few other message boards and they all seem to provide their tutorials using Tomcat (ewwww)!!!. My task is to provide Jenkins as a stand alone service for maintainability reasons. So far I have set HUDSONHOME, CLASSPATH, and JAVA_HOME. My version of java is

java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (rhel-1.39.1.9.7.el6-x86_64)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)

and I have a script in /etc/profile.d that does the following:

JAVA_HOME=/usr/java;
JRE_HOME=/usr/java/jre/bin;
if [ "${CLASSPATH}" == "" ]; then
CLASSPATH=/var/lib/jenkins/war/WEB-INF;
HUDSON_HOME=/var/lib/jenkins/war/WEB-INF;
else
CLASSPATH=${CLASSPATH}:/var/lib/jenkins/war/WEB-INF;
HUDSON_HOME=/var/lib/jenkins/war/WEB-INF;
fi
PATH=${PATH}:${JAVA_HOME}/bin:/opt/StarTeamCP_2009/bin:/opt/QtSDK/Desktop/Qt/474/gcc/bin:/opt/QtSDK/QtCreator/bin/:${CLASSPATH}:${HUDSON_HOME};
export JAVA_HOME;
export PATH;
export CLASPATH;

Looking in /etc/passwd, Jenkins default shell is bash so no need for a csh version of the script. As a user I can login as all variables are set correctly. I installed the Jenkins RPM from their homepage RPM link.

The error I am getting from Jenkins output window is:

FATAL: com/starbase/starteam/Folder
java.lang.NoClassDefFoundError: com/starbase/starteam/Folder
    at hudson.plugins.starteam.StarTeamSCM.checkout(StarTeamSCM.java:127)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1195)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:576)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:465)
    at hudson.model.Run.run(Run.java:1404)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:238)
Caused by: java.lang.ClassNotFoundException: com.starbase.starteam.Folder
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    ... 8 more

What am I missing?


As for your "class not found" exception, you're pulling in libraries that aren't part of Tomcat or Jenkins, and they apparently depend on items that are also not in Tomcat or Jenkins. This leads to the question, "Why are you populating your environment with borland libraries if you want to run a non-borland application?"

In response to this, I am using the Starteam Plugin as part of Jenkins. Jenkins needs to know the definitions of the StarTeam classes contained within Borlands .jar files.

4

1 回答 1

1

---根据更新进行了编辑---

好的,您需要 Jenkins 插件的明星团队库。这就明白了。谢谢你的澄清。

由于您使用的是 Jenkins 的 RPM 版本,因此您使用的是 Tomcat(它是一个依赖项)。将来是否尝试在没有 Tomcat 的情况下运行 Jenkins(以及如何进行)是您的最终选择;但是,您可能会发现 Tomcat 增加的价值比您想象的要多得多。

您当前遇到的问题与 Tomcat 强制安全类加载有关。您不能假设 Tomcat 的 CLASSPATH 条目可用于内部 Web 应用程序。这有充分的理由。

由于 Tomcat 区分了两者(容器/应用程序),因此应用程序可以彼此独立地选择它们需要的内容。好处是不必重写或调整应用程序以使用相同版本的库(jar 文件)。不利的一面是类路径等需要在每个 webapp 的基础上进行配置。

我的猜测是,Jenkins 文档中的某处提到了在 $(webapps)/jenkins/WEB-INF/lib 中某处的相关库中复制(或链接)的项目。也就是说,如果有任何 Jenkins-starteam 文档,我会先参考它。

祝你好运。

--- 原帖如下---

Jenkens 是一个 Java Web 应用程序。Tomcat 是一个 Java Web 服务器。在 Java Web 服务器之外运行 Java Web 应用程序将非常困难。

Web 服务器打开端口以接受 Web 请求,然后将这些请求的已处理形式路由到 Web 应用程序。通常不可能以独立模式运行应用程序,因为 Web 应用程序对 HTTP 协议、网络套接字、会话跟踪、身份验证等的细节知之甚少。

有时可以在应用程序中嵌入一个小型 Java Web 服务器(以提供快速部署);然而,这并不是一个真正“更受支持”的环境,因为第二次你需要在同一台机器上运行两个“项目”,你会遇到嵌入式配置争夺相同端口的问题。这涉及“解包”应用程序、进行内部更改和重新打包。任何“更新”都将完全重置特定于站点的自定义。

关于 Tomcat 的唯一“ewwww”部分可能是您对它感到不舒服。没关系,每个人都是这样开始的。

至于您的“找不到类”异常,您正在引入不属于 Tomcat 或 Jenkins 的库,它们显然依赖于不在 Tomcat 或 Jenkins 中的项目。这就引出了一个问题,“如果你想运行一个非 Borland 应用程序,你为什么要用 borland 库来填充你的环境?”

于 2012-01-25T20:32:00.323 回答