2017-12-11 12 views
6

JFX 인스턴스를 실행하는 데 의존하는 단위 테스트를 개발 중이지만 Bitbucket이 테스트를 실행할 때 JFXPanel을 초기화 할 때 실패합니다. JFXPanel 실행왜 Bitbucket이 내 JFX 프로젝트를 빌드 할 수 없습니까?

pipelines: 
    default: 
    - step: 
     caches: 
      - maven 
     script: # Modify the commands below to build your repository. 
      - apt-get update && apt-get install -y openjfx 

      - mvn install:install-file -Dfile=lib/builder.jar -DgroupId=builder -DartifactId=builder 
      -Dversion=1.0 -Dpackaging=jar 

      - mvn clean test 

@BeforeClass :

이 내의 bitbucket - 파이프 라인입니다 내 컴퓨터에서 문제없이 내 프로젝트를 구축 할 수 있습니다

@BeforeClass 
public static void setup() { 
    new JFXPanel(); 
} 

,하지만의 Bitbucket 수 없어 .

의 Bitbucket 테스트 로그 : 저도 같은 문제를 가지고 사람을 찾을 수 없습니다

T E S T S 
------------------------------------------------------- 
Running com.abc.suapp.model.QuickCommandsTest 
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.045 sec 
Running com.abc.suapp.model.DeviceTest 
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec 
Running com.abc.suapp.factory.SystraceFactoryTest 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.224 sec <<< FAILURE! 
com.abc.suapp.factory.SystraceFactoryTest Time elapsed: 0.223 sec <<< ERROR! 
java.lang.UnsupportedOperationException: Unable to open DISPLAY 
    at com.sun.glass.ui.gtk.GtkApplication.<init>(GtkApplication.java:68) 
    at com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41) 
    at com.sun.glass.ui.Application.run(Application.java:146) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:257) 
    at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211) 
    at javafx.embed.swing.JFXPanel.initFx(JFXPanel.java:215) 
    at javafx.embed.swing.JFXPanel.<init>(JFXPanel.java:230) 
    at com.abc.suapp.factory.SystraceFactoryTest.setup(SystraceFactoryTest.java:25) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) 
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) 

. bitbucket에서 빌드가 실패한 것과 비슷한 문제는 일부 명령이 누락 된 파이프 라인이 될 수 있다고 말합니다.

답변

9

Bitbucket은 그래픽 디스플레이없이 headless test environment만을 제공합니다. JavaFX는 헤드리스 환경을 기본적으로 지원하지 않기 때문에 java.lang.UnsupportedOperationException: Unable to open DISPLAY 예외가 발생합니다.

JavaFX의 유리창 구성 요소의 헤드리스 구현을 OpenJFX의 Monocle 프로젝트처럼 설치하고 구성해야합니다. Monocle은 주로 OpenJDKOpenJFX의 버전을 사용합니다. 패치를 적용하려면 Monocle에 패치를 적용해야 할 때도 있습니다. OpenJFX wiki - MonocleGithub - Monocle을 참조하십시오.

자세한 내용은 JEROME'S BLOG - Testing JavaFX in headless mode 및/또는 Uwe's Blog - Headless UI Testing with TestFX and JavaFX 8을 참조하십시오.