2016-07-23 120 views
1

我想讓我的NetBeans項目在竹子中構建。它大部分似乎都在工作,但我無法在構建NetBeans時啓動我的項目。如何將NetBeans ant build移植到構建服務器(Atlassian Bamboo)

當我構建netbeans時,它(通過默認的ant build)將我的相關庫粘貼到一個名爲dist/lib/commons-math3-3.6.1.jar的目錄中,我的jar創建於:dist/MyJar.jar 。我可以通過鍵入運行我的罐子

java -jar MyJar.jar 

它會找到我的依賴庫。但是,當我建立竹子時,有一點不同,我注意到哪些是我的庫沒有複製到dist/lib /。但由於他們在我的項目的根本不是一個問題,我只是繼續並從我的/ libs /到/ dist/lib /重新複製他們,然後我嘗試「java -jar MyJar.jar」命令,但我得到這個錯誤:

[email protected]:~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 

任何想法或建議從螞蟻和atlassian竹知識的人是非常感謝。

我應該提到,md5sum不同於工作罐和用竹子建造的工作罐。

我用命令:螞蟻乾淨的jar命令行來構建

UPDATE 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腳本構建時運行。

+0

首先,你不應該在dist文件夾中放置任何東西。它只用於構建,並且每次都會清理乾淨。 Colud包你netbeans項目歸檔並通過任何可用的服務分享它。例如:http://dropcanvas.com –

+0

我可能正在遵循dist dir的最佳實踐,並使用NetBeans默認行爲擦除dist dir clean並將發佈jar複製到dist文件夾中。順便說一下,它的NetBeans最初是通過它的默認構建腳本來完成的。 – simgineer

+0

這裏是我的項目的鏈接:https://drive.google.com/open?id = 0B5FRf3pjR6UBQmVRY1B4QlB4a2M – simgineer

回答

0

這是一個痛苦的想法。基本上,copylibstask.jar需要在竹上可用,但由於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可以再次執行。