如何在ejb-jar.xml中放置版本号和内部版本号

时间:2015-11-09 07:29:26

标签: java xml java-ee netbeans glassfish

我正在使用Netbeans 8.0.2和Glassfish 4.0(和4.1)来构建消息驱动的bean。我没有使用Maven(我的选择就是使用它)

有一篇文章要将修订版和内部版本号放在build.xml文件(http://dragly.org/2009/10/11/revision-and-build-numbers-for-your-netbeans-apps/)中。这是一个SE应用程序,我不确定它是否适用于EJB以及如何。

我有一个固定的版本号,但需要增加内部版本号。

  1. 在哪里以及如何为EJB设置版本号(加上内部版本号)? (它应该像1.0.0。 buildNumber )(搜索“ejb-jar.xml”加上版本提供了很多EJB版本2.x,3.x结果)
  2. 如何在EJB中访问此数字? (我想把它作为我班上的资源来访问?)

1 个答案:

答案 0 :(得分:0)

好的,我已经弄明白了: 对于build.xml文件中的jar(库,SE等),在结束</project>标记之前插入以下内容;基于http://www.jug-muenster.de/versioning-and-signing-jar-files-in-netbeans-775/注意:清单文件的格式非常具体!

<target name="-pre-init">
    <property name="project.name" value="MySEProject" />
    <property name="document.title" value="My SE Project Specification" />
    <property name="document.version" value="1.0" />
    <property name="version.number" value="1.7.0" />
    <buildnumber file="build.num" />
    <tstamp>
        <format property="NOW" pattern="yyyy-MM-dd HH:mm:ss z" />
    </tstamp>

    <exec outputproperty="svna.version" executable="svnversion">
        <arg value="-c" />
        <redirector>
            <outputfilterchain>
                <tokenfilter>
                    <replaceregex pattern="^[0-9]*:?" replace="" flags="g"/>
                    <replaceregex pattern="M" replace="" flags="g"/>
                </tokenfilter>
            </outputfilterchain>
        </redirector>
    </exec>

    <!-- Add the version information to the manifest file -->
    <manifest file="${manifest.file}">
        <attribute name="Package-Title" value="MyCompany/${project.name}" />
        <attribute name="Specification-Title" value="${document.title}" />
        <attribute name="Specification-Version" value="${document.version}" />
        <attribute name="Specification-Vendor" value="MyCompany" />
        <attribute name="Implementation-Title" value="${project.name}" />
        <attribute name="Implementation-Version" value="${halo.version.number}.${build.number}" />
        <attribute name="Implementation-Vendor" value="MyCompany" />
        <attribute name="Revision" value="${svna.version}" />
        <attribute name="Built-By" value="${user.name}" />
        <attribute name="Built-Date" value="${NOW}" />
    </manifest>
</target>

<target name="-post-jar">
    <delete file="${manifest.file}" />
</target>

对于EJB。在(ABC)企业应用程序文件夹中,编辑与上面相同的build.xml文件,目标标记名称更改为pre-dist 以及清单标记{{1} }。

此外,对于EJB,要能够编程读取版本号,请编辑ABC-ejb文件夹中的<manifest file="${meta.inf}/MANIFEST.MF">文件(其中ABC是ejb项目名称)。目标名称更改为build.xml

读取它的代码(你从你所包含的所有库中获取所有清单文件,因此你必须寻找你的那个 - 也许更好的方法是查看URL?):

-post-init

注意: import java.io.InputStream; import java.net.URL; import java.util.Enumeration; import java.util.jar.Manifest; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author TungstenX */ public class VersionInfo { private static final Logger LOG = Logger.getLogger(VersionInfo.class.getName()); private static final String PROJECT = "MySEProject"; private static final String COMPANY = "MyCompany"; private static Manifest MANIFEST; /** * Get the version number from the manifest file * @return The version number or '--' */ public static String GetVersionNumber() { if (MANIFEST == null) { try { Enumeration<URL> resources = VersionInfo.class.getClassLoader().getResources("META-INF/MANIFEST.MF"); while (resources.hasMoreElements()) { URL url = resources.nextElement(); try(InputStream is = url.openStream()) { Manifest tmpManifest = new Manifest(is); for (Object o : tmpManifest.getMainAttributes().keySet()) { if (o.toString().equals("Package-Title") && tmpManifest.getMainAttributes().getValue(o.toString()).startsWith(COMPANY) && tmpManifest.getMainAttributes().getValue(o.toString()).endsWith(PROJECT)) { MANIFEST = tmpManifest; } } } catch (Exception e) { LOG.log(Level.SEVERE, "Error while reading manifest files: {0}", e.toString()); } } } catch (Exception e) { LOG.log(Level.SEVERE, "Error while reading manifest files: {0}", e.toString()); } } if(MANIFEST != null) { return MANIFEST.getMainAttributes().getValue("Implementation-Version"); } else { return "--"; } } 文件的目标名称和位置的差异!