2015-01-08 4 views
1

Java/JNI 프로젝트에서 작업 중입니다. 부모 아래에서, 나는 자바와 C 코드베이스에 대해 다른 모듈을 가지고있다. 자바 모듈은 JNI 헤더 파일을 생성해야한다. 이후 javah를 지원하는 기존 작업/플러그인을 찾을 수 없었으므로 javah가 JNI 인터페이스를 생성하도록 내 사용자 정의 작업을 작성했습니다. 그래서, 내가 할 때 gradle javah gradle 빌드가 실행될 때 사용자 정의 작업을 실행해야합니다.

나는 원하는 출력을 얻고있다.

  1. 그러나 나는 gradle build을 호출 할 때마다 클래스가 생성되거나 빌드 작업이 끝난 후에도 javah 작업을 실행해야합니다.
  2. 또한 혼합 프로젝트에서 공유 라이브러리를 생성하는 것이 가능합니까? gradle build? 현재, 나는 gradle <project-name>SharedLibrary
+0

음,'dependsOn (compileJava)' – fge

+0

시도해 보았지만 작동하지 않는 것 같습니다. – vijar

답변

1

1 부을 할 필요가 : 당신은 task2task1 후 완료를 실행 task1finalizedBy를 사용할 수 있습니다. 귀하의 경우를 들어, 다음을 시도 할 수 있습니다 :

// 'javah' will be executed after 'classes' task executes. 
classes.finalizedBy javah 

// Make 'javah' task depend on 'classes' task, 
// so that when 'classes' task fails, 'javah' is not executed. 
javah.dependsOn classes 

// Make 'build' depend on 'javah' task, 
// so that executing 'build' task automatically executes 'javah' 
build.dependsOn javah 

2 부 :

build.dependsOn "${project.name}SharedLibrary" 

// Assuming the SharedLibrary task needs to depend on 'javah' task 
tasks["${project.name}SharedLibrary"].dependsOn javah 

을 나는 있으리라 믿고있어 다음과 같이 당신은 <project-name>SharedLibrary 작업을 묶는 dependsOn을 사용할 수 있습니다 SharedLibarary 작업 이름은 동적이므로 해당 작업에 약간 다른 구문을 사용합니다.

+0

finalizedBy를 조사해, 「클래스」태스크가 실패해도 javah가 불려 가도록 (듯이)합니다. '클래스'작업이 성공적 일 때 javah를 호출하기를 원합니다. – vijar

+0

내 대답을 편집했습니다. javah 작업을 위해'classes '에 의존성을 추가함으로써이를 극복 할 수 있습니다. 'javah.dependsOn 클래스'. –

관련 문제