BlackBerry - Ant 脚本,用于将 JAR 包含在项目中,而无需外部依赖项


这是

黑莓 - 在自己的项目中使用自己的JAR文件和黑莓 - Ant构建脚本用于更复杂的应用程序的后续。这个问题现在已经在下面解决了

目的

我想:

  1. 使用 Ant(bb-ant-tools(将我的库构建为 JAR 文件
  2. 将该 JAR 文件包含在项目中
  3. 使用 Ant 将该项目构建到将在设备上运行的 COD 中(无需外部 COD 文件(。

重要的部分是使用 Ant 来完成构建的最后阶段

我找到的所有关于这个问题的帖子都使用Eclipse进行最终构建阶段(黑莓的详细信息 - 在自己的项目中使用自己的JAR文件(。


进展

  1. 我可以使用 Ant 将库项目构建为 JAR。
  2. 在 Eclipse 中,我可以将该 JAR 文件添加到项目中,并根据需要构建它(单个 COD,无外部依赖关系(。它将在设备上运行。
  3. 在 Ant 中,我还可以制作一个依赖于额外的 COD 库来包含运行时代码的构建 - 这接近我的需求。

问题

我可以用 Ant 构建最终项目。但是生成的 COD 文件不包含我的库中的任何运行时代码

我读过的许多帖子都展示了如何使用库的额外 COD 文件来完成此操作。我想避免这种情况。

如何使用 Ant 将 JAR 包含在没有外部依赖项的项目中?我相信这是可能的,因为我可以使用Eclipse来做到这一点。


解决方法

我目前的解决方法是将我的 SDK/库项目作为源代码(根据下面的 esaj 答案(,而不是作为 JAR 文件。与 JAR 方法相比,这有一些缺点,但我有一个在设备上成功运行的版本。


(我希望可以用以下一长串链接交叉引用这个问题?

堆栈溢出链接:

  • 用于黑莓开发的持续集成服务器?(和证书签名((我没有时间经历这个,但我认为它看起来很有希望(
  • 黑莓:使用库项目作为外部 Jar 时出现验证错误
  • https://stackoverflow.com/questions/6134940/how-to-use-external-library-jar-file-in-blackberry
  • Blackberry 5.0 - 添加对 Java 库项目的引用
  • 如何在黑莓项目中添加外部jar或zip文件
  • 黑莓应用程序 - 将代码签名的 jar 导入应用程序项目
  • 如何在黑莓中将库项目与当前开发项目添加

这个提供了其他链接 - 非常有用:

  • 处理黑莓开发中的依赖关系

这些不太有用:

  • 在黑莓中,我们可以创建可供不同应用程序使用的通用库吗?
  • 黑莓脸书 SDK jar 文件
  • 添加和测试外部 Jar 对黑莓项目的兼容性
  • 如何在黑莓中连接罐
  • 需要黑莓RIMAPPSA2签名密钥 - 为什么?
  • 是否有一个类、方法和 API 的列表,这些类、方法和 API 将在签署黑莓应用程序时触发RIMAPPSA2权限?

边缘:

  • rapc.exe 工具使用的 javac 目标参数
  • 添加.jar文件依赖项
  • BB项目中添加的其他jar - 使用BB蚂蚁工具
  • 教程:如何在应用程序中使用第三方库

您是否尝试过指向 rapc 下 src 部分中的库?

例如:

<rapc ...>
  <src>
    <fileset dir="${buildDirectory}">
      <include name="src/**/*.rrh" />
      <include name="src/**/*.rrc" />
      <include name="src/**/*.java" />
      <include name="res/**/*.*" />
      <!-- Libraries -->
      <include name="lib/**/*.*" />
    </fileset>
  </src>
</rapc>

去年我遇到了类似的问题,我创建了一个"框架",用作多个 BB 应用程序的基础,但遇到了多个 COD 的问题(我不记得具体是什么,比如设备拒绝安装具有相同外部编码的多个应用程序,如果不先单独安装外部 COD,然后再安装应用程序(。由于应用程序可以单独安装(一个人可能只安装应用程序 A,另一个人可能只安装应用程序 B,还有一个人可能同时安装 A 和 B(,因此整个框架需要包含在使用它的所有应用程序中。我使用 bb-ant 工具制作了这个 Ant 脚本(希望我没有破坏任何东西,删除一些特定于我们应用程序的东西并混淆包名称等(:

<?xml version="1.0" encoding="UTF-8"?>
<project name="${description}" default="build" basedir=".">
    <taskdef resource="bb-ant-defs.xml" classpath="lib/bb-ant-tools.jar" />
    <!-- rapc and sigtool require the jde.home property to be set -->
    <!-- NOTE: You may need to copy the signature files from Eclipsepluginsnet.rim.ejdevmTools to the componentsbin -dir 
        if the keys were installed using the Eclipse-plugin     -->
    <property name="jdehome" value="C:BBEclipsepluginsnet.rim.ejde.componentpack5.0.0_5.0.0.25components" />
    <!-- Framework source locations, these must be set correctly -->
    <property name="frameworkRes.dir" value="C:BBworkspaceBB_Frameworkres" />
    <property name="frameworkSrc.dir" value="C:BBworkspaceBB_Frameworksrccomwhateverframe" />
    <!-- Locations for simulator, binaries, jde home, don't touch these -->
    <property name="simulator" value="${jdehome}simulator" />
    <property name="bin" value="${jdehome}bin" />
    <property name="jde.home" location="${jdehome}" />
    <!-- directory of simulator to copy files to -->
    <property name="simulator.home" location="${simulator}" />
    <property name="src.dir" location="src" />
    <property name="build.dir" location="build" />
    <property name="temp.dir" location="C:tempsrc" />
    <!-- Project specific -->
    <!-- Application title -->
    <property name="app.title" value="Application Name" />
    <property name="app.version" value="1.0.0" />
    <!-- Value to prepend before frame-class packages -->
    <property name="frame.prefix" value="appname" />
    <!-- Name of the COD to produce --> 
    <property name="cod.name" value="Appname" />
    <target name="build">
        <mkdir dir="${build.dir}" />
        <delete dir="${temp.dir}" />
        <mkdir dir="${temp.dir}" />
        <mkdir dir="${temp.dir}${frame.prefix}" />
        <copy toDir="${temp.dir}">
            <fileset dir="${src.dir}">
                <include name="**/*.java" />
            </fileset>
        </copy>
        <copy toDir="${temp.dir}${frame.prefix}">
            <fileset dir="${frameworkSrc.dir}">
                <include name="**/*.java" />
            </fileset>
        </copy>
        <copy toDir="${temp.dir}res">
            <fileset dir="${frameworkRes.dir}">
                <include name="**/*" />
            </fileset>
        </copy>
        <copy toDir="${temp.dir}res">
            <fileset dir="res">
                <include name="**/*" />
            </fileset>
        </copy>
        <!-- This replaces the package names for classes copied from under framework-directory to ${frame.prefix} -directory -->    
        <replace dir="${temp.dir}" value="${frame.prefix}">
            <include name="**/*.java"/>
            <replacetoken>com.whatever.frame</replacetoken>
        </replace>
        <rapc output="${cod.name}" srcdir="${temp.dir}" destdir="${build.dir}">
            <jdp title="${app.title}" 
                version="${app.version}" 
                vendor="Your Company"
                icon="../res/img/icon.png"
            />
        </rapc>
    </target>
    <target name="sign">
        <sigtool codfile="${build.dir}/${cod.name}.cod" />
    </target>
    <target name="clean">
        <delete dir="${build.dir}" />
    </target>
    <target name="load-simulator" depends="build">
        <copy todir="${simulator.home}">
            <fileset dir="${build.dir}" includes="*.cod,*.cso,*.debug,*.jad,*.jar" />
        </copy>
    </target>
</project>

这样做的目的是将所有 java 文件和资源从当前项目复制,然后从框架项目复制到临时目录,在框架工作文件的过程中替换包名称(因为它们被放入一个单独命名的目录中(,这与以下事实有关:设备还拒绝安装多个在同一包下具有相同类的应用程序(即 框架类,对于您的情况,这可能不是必需的(。复制和替换完成后,将使用 rapc 将应用程序构建为目标构建目录。签名、清理应用和将应用加载到模拟器有单独的任务。希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新