gpt4 book ai didi

Eclipse 与 Java EE (EJB)、ANT 和 Jenkins/Hudson

转载 作者:行者123 更新时间:2023-12-02 13:47:21 26 4
gpt4 key购买 nike

我的目标是在 Jenkins 上构建企业 Java 应用程序。该应用程序由 4 个项目组成(客户端接口(interface)、Web 应用程序(包括 Faces)、EJB 应用程序(包括 JPA)、EAR-Container-Project)。

当 Eclipse 将此项目部署到 glassfish 服务器时,它将 Web 应用程序(war 文件)、客户端接口(interface)(jar 文件)和 EJB 接口(interface)(jar 文件)组装到一个 Ear 文件中。

现在,如果我想使用持续集成,我需要在 CI-Server jenkins 上实现相同的目标。

我的第一个想法是用 ant 来解决这个问题,所以我使用了 Eclipse 的导出功能并为项目生成了构建文件。

问题是生成的构建文件引用了项目目录之外的 Java EE 库(例如 Glassfish-Runtime、JPA-Library 等)。大约有30个图书馆。

这意味着我无法在 jenkins 上使用该文件,因为缺少该库。我当然可以复制这些,但我认为不应该这样做。

那么,在 CI 服务器上构建 Java EE 企业应用程序的最佳方法是什么?我是否必须自己编写 ANT 脚本并将库复制到项目中?或者我错过了一些明显的东西?

最佳答案

由于没有找到适合我的东西,所以我自己写了一个ant脚本来满足我的需求。

如果这对将来的任何人有帮助,这是我的解决方案:`

<project basedir="." default="build" name="Project">

<available property="glassfishdir" value="/opt/glassfish3/glassfish/modules"
file="/opt/glassfish3/glassfish/modules" type="dir" />

<!-- ########### Property Declarations ################################################################################################################### -->
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.6"/>
<property name="source" value="1.6"/>
<property name="builddir" value="build" />
<property name="outputartifacts" value="out" />

<property name="web.name" value="ProjectWeb" />
<property name="web.projectpath" value="ProjectWeb"/>
<property name="web.src" value="${web.projectpath}/src" />
<property name="web.builddir" value="${builddir}/web" />
<property name="web.builddir.classes" value="${web.builddir}/WEB-INF/classes"/>

<property name="ejb.name" value="ProjectEJB" />
<property name="ejb.projectpath" value="ProjectEJB"/>
<property name="ejb.src" value="${ejb.projectpath}/src"/>
<property name="ejb.builddir" value="${builddir}/ejb" />
<property name="ejb.builddir.classes" value="${ejb.builddir}/classes" />

<property name="ejbclient.name" value="ProjectEJBClient" />
<property name="ejbclient.projectpath" value="ProjectEJBClient"/>
<property name="ejbclient.src" value="${ejbclient.projectpath}/src"/>
<property name="ejbclient.builddir" value="${builddir}/ejbclient" />
<property name="ejbclient.builddir.classes" value="${ejbclient.builddir}/classes"/>

<property name="ear.name" value="ProjectApplication" />
<property name="ear.dir" value="ProjectEAR" />

<!-- ########### Main Targets ################################################################################################################### -->
<target name="build" depends="create-ear">
</target>

<target name="clean-build">
<antcall target="clean" />
<antcall target="build" />
</target>

<target name="clean">
<delete dir="${builddir}"/>
<delete dir="${outputartifacts}"/>
</target>

<target name="init">
<mkdir dir="${outputartifacts}" />
</target>

<!-- ########### EJB App ################################################################################################################### -->
<target name="init-ejb" depends="init">
<mkdir dir="${ejb.builddir}" />
<copy includeemptydirs="false" todir="${ejb.builddir.classes}">
<fileset dir="${ejb.src}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="build-ejb" depends="init-ejb">
<javac debug="true" debuglevel="${debuglevel}" destdir="${ejb.builddir.classes}" includeantruntime="false" source="${source}" target="${target}">
<src path="${ejb.src}"/>
<classpath>
<fileset dir="${glassfishdir}">
<include name="**/*.jar"/>
</fileset>

<fileset dir="${outputartifacts}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
</target>

<!-- ########### WEB ################################################################################################################### -->
<target name="init-web" depends="init">
<mkdir dir="${web.builddir.classes}"/>
<copy includeemptydirs="false" todir="${web.builddir}">
<fileset dir="${web.projectpath}/WebContent">
</fileset>
</copy>
<copy includeemptydirs="false" todir="${web.builddir.classes}">
<fileset dir="${web.src}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>

<target depends="init-web,create-ejb-client" name="build-web">
<javac debug="true" debuglevel="${debuglevel}" destdir="${web.builddir.classes}" includeantruntime="false" source="${source}" target="${target}">
<src path="${web.src}"/>
<classpath>
<fileset dir="${glassfishdir}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="out/">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
</target>
<!-- ############## EJB CLIENT ################################################################################################################ -->
<target name="init-ejb-client" depends="init">
<mkdir dir="${ejbclient.builddir}"/>
<copy includeemptydirs="false" todir="${ejbclient.builddir.classes}">
<fileset dir="${ejbclient.src}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>


<target depends="init-ejb-client" name="build-ejb-client">
<javac debug="true" debuglevel="${debuglevel}" destdir="${ejbclient.builddir.classes}" includeantruntime="false" source="${source}" target="${target}">
<src path="${ejbclient.src}"/>
<classpath>
<fileset dir="${glassfishdir}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
</target>


<!-- ############ CREATE ARCHIVES################################################################################################################## -->
<target name="create-web" depends="build-web">
<war destfile="${outputartifacts}/${web.name}.war" basedir="${web.builddir}" webxml="${web.projectpath}/WebContent/WEB-INF/web.xml"/>
</target>

<target name="create-ejb-client" depends="build-ejb-client">
<jar destfile="${outputartifacts}/${ejbclient.name}.jar" basedir="${ejbclient.builddir.classes}" includes="**/*"/>
</target>

<target name="create-ejb" depends="build-ejb">
<jar destfile="${outputartifacts}/${ejb.name}.jar" basedir="${ejb.builddir.classes}" includes="**/*">
<manifest>
<attribute name="Class-Path" value="${ejbclient.name}.jar"/>
</manifest>
</jar>
</target>

<target name="create-ear" depends="create-ejb-client,create-web,create-ejb">
<ear destfile="${outputartifacts}/${ear.name}.ear" appxml="${ear.dir}/EarContent/META-INF/application.xml">
<fileset dir="${outputartifacts}" includes="*.jar,*.war"/>
</ear>
</target>


</project>

`

关于Eclipse 与 Java EE (EJB)、ANT 和 Jenkins/Hudson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15247751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com