如何将 NetBeans ant build 移植到构建服务器(Atlassian Bamboo)
Posted
技术标签:
【中文标题】如何将 NetBeans ant build 移植到构建服务器(Atlassian Bamboo)【英文标题】:How to port NetBeans ant build into build server (Atlassian Bamboo) 【发布时间】:2016-07-23 03:07:17 【问题描述】:我想让我的 NetBeans 项目用竹子构建。大部分似乎都在工作,但我无法像在 NetBeans 中构建时那样启动我的项目。
当我在 netbeans 中构建时,它(默认为 ant 构建)将我的依赖库粘贴到一个名为 dist/lib/commons-math3-3.6.1.jar 的目录中,并且我的 jar 在:dist/MyJar.jar 中创建。我可以通过键入来运行我的 jar
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$0(MainFrame.java:365)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.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
非常感谢了解蚂蚁和阿特拉斯竹的人的任何想法或建议。
我应该提一下,md5sum 不同于工作罐和用竹子建造的罐子。
我使用命令:ant clean jar 从命令行构建
2017 年 8 月 4 日更新
我注意到在竹子上我得到了这个:
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"
所以我想我的新更新问题是为什么竹服务器上的构建与我的工作站上的行为不同。什么是未复制的依赖 jar 以及为什么我能够使用 -jar 选项来运行文件,因为在构建服务器上我需要使用 vanilla java 来运行从竹服务器上的 ant 脚本构建时。
【问题讨论】:
首先,你不应该在 dist 文件夹中放任何东西。它仅用于构建,并且每次都会清理。 Colud 你打包你的 netbeans 项目以通过任何可用的服务存档和共享它。例如:dropcanvas.com 我可能正在遵循 dist 目录的最佳实践,并使用 NetBeans 默认行为擦除 dist 目录并将发布 jar 复制到 dist 文件夹中。顺便说一句,它最初使用默认构建脚本执行此操作的 NetBeans。 这里是我的项目的链接:drive.google.com/open?id=0B5FRf3pjR6UBQmVRY1B4QlB4a2M 【参考方案1】:这很痛苦。基本上 copylibstask.jar 需要对竹子上的 ant 可用,但由于构建服务器上没有安装 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 可以再次执行。
【讨论】:
以上是关于如何将 NetBeans ant build 移植到构建服务器(Atlassian Bamboo)的主要内容,如果未能解决你的问题,请参考以下文章
在 NetBeans 中编译 Maven 项目时 Ant 无法找到环境变量
我如何知道来自 build.xml 的 Glassfish 安装目录?
Java:如何使用自定义 Ant build.xml 将 ProGuard 集成到 Jar 项目中