如何将 NetBeans ant build 移植到构建服务器 (Atlassian Bamboo)

How to port NetBeans ant build into build server (Atlassian Bamboo)

我想用 bamboo 构建我的 NetBeans 项目。其中大部分似乎都可以正常工作,但我无法像在 NetBeans 中构建时那样启动我的项目。

当我在 netbeans 中构建时(默认情况下是 ant 构建)将我的依赖库粘贴到一个名为 dist/lib/commons-math3-3.6.1.jar 的目录中,我的 jar 创建于:dist/MyJar。罐。我可以通过输入 运行 我的罐子

java -jar MyJar.jar

它会找到我的依赖库。然而,当我用竹子建造时,我注意到有一点不同,那就是我的库没有被复制到 dist/lib/。但因为它们在我项目的根目录中,所以这不是问题,我只是继续将它们从我的 /libs/ 重新复制到 /dist/lib/ 然后我尝试 "java -jar MyJar.jar" 命令但我得到这个错误:

james@build.mycompany.com:~dist/$ java -jar MyJar.jar 
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/math3/stat/descriptive/moment/StandardDeviation
    at readnthvalue.App.<clinit>(App.java:26)
    at readnthvalue.MainFrame.<init>(MainFrame.java:31)
    at readnthvalue.MainFrame.lambda$main[=11=](MainFrame.java:365)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access0(EventQueue.java:97)
    at java.awt.EventQueue.run(EventQueue.java:709)
    at java.awt.EventQueue.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.math3.stat.descriptive.moment.StandardDeviation
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 17 more

非常感谢熟悉 ant 和 atlassian bamboo 的人的任何想法或建议。

我应该提一下,md5sum 不同于工作罐和用竹子建造的罐子。

我使用命令:ant clean jar 从命令行构建

更新 2017 年 4 月 8 日

我注意到在竹子上我得到了这个:

build   04-Aug-2017 14:02:51    -do-jar-jar:
build   04-Aug-2017 14:02:51    [j2seproject1:jar] Building jar: /home/filtec/bamboo-home/xml-data/build-dir/AUR-ATP-JOB1/dist/auratec-helper.jar
build   04-Aug-2017 14:02:51         [echo] To run this application from the command line without Ant, try:
build   04-Aug-2017 14:02:51         [echo] /home/filtec/jdk1.8.0_65/jre/bin/java -cp /home/filtec/bamboo-home/xml-data/build-dir/AUR-ATP-JOB1/libs/jfreechart-1.0.19.jar:/home/filtec/bamboo-home/xml-data/build-dir/AUR-ATP-JOB1/libs/jcommon-1.0.23.jar:/home/filtec/bamboo-home/xml-data/build-dir/AUR-ATP-JOB1/libs/commons-math3-3.6.1.jar:/home/filtec/bamboo-home/xml-data/build-dir/AUR-ATP-JOB1/libs/jSerialComm-1.3.11.jar:/home/filtec/bamboo-home/xml-data/build-dir/AUR-ATP-JOB1/dist/auratec-helper.jar filtec.auratec.MainFrame

但在 NetBeans 中我得到了这个输出:

Building jar: /home/james/NetBeansProjects/auratec-helper/dist/auratec-helper.jar
To run this application from the command line without Ant, try:
java -jar "/home/james/NetBeansProjects/auratec-helper/dist/auratec-helper.jar"

所以我想我的新更新问题是为什么 bamboo 服务器上的构建与我的工作站上的行为不同。没有复制的依赖 jar 是什么?为什么我可以使用 -jar 选项来 运行 文件,而在构建服务器上我需要在构建时使用 vanilla java 到 运行来自 bamboo 服务器上的 ant 脚本。

这很难弄清楚。基本上,copylibstask.jar 需要对 ant on bamboo 可用,但由于构建服务器上未安装 NetBeans,我们需要手动引用它。我已将副本放入 /libs/org-netbeans-modules-java-j2seproject-copylibstask.jar 并在 project.properties 文件中引用它。

# this is needed for the ant build
libs.CopyLibs.classpath=libs/org-netbeans-modules-java-j2seproject-copylibstask.jar

库正在复制,jar 可再次执行。