2012-07-13 36 views
5

Tôi đang cố xác định tác vụ jar cho tất cả các dự án phụ (khoảng 30). Tôi đã thử công việc sau:Xác định đường dẫn lớp tùy chỉnh cho biểu hiện jar trong gradle

jar { 
      destinationDir = file('../../../../_temp/core/modules') 
      archiveName = baseName + '.' + extension 
      metaInf { 
        from 'ejbModule/META-INF/' exclude 'MANIFEST.MF' 
      } 

      def manifestClasspath = configurations.runtime.collect { it.getName() }.join(',') 
      manifest { 
      attributes("Manifest-Version"  : "1.0", 
       "Created-By"    : vendor, 
       "Specification-Title" : appName, 
       "Specification-Version" : version, 
       "Specification-Vendor" : vendor, 
       "Implementation-Title" : appName, 
       "Implementation-Version" : version, 
       "Implementation-Vendor" : vendor, 
       "Main-Class"    : "com.dcx.epep.Start", 
       "Class-Path"    : manifestClasspath 
      ) 
      } 
    } 

Vấn đề của tôi là phụ thuộc giữa các dự án phụ không được bao gồm trong đường dẫn lớp của tệp kê khai. Tôi đã thử thay đổi cấu hình thời gian chạy thành cấu hình biên dịch nhưng điều đó dẫn đến lỗi sau.

  • gì đã xảy ra: Một vấn đề xảy ra đánh giá dự án ': EskoordClient'.

    Bạn không thể thay đổi cấu hình không ở trạng thái chưa được giải quyết!

Đó là xây dựng hoàn chỉnh của tôi tập tin cho dự án EskoordClient:

dependencies {  
    compile project(':ePEPClient') 
} 

Hầu hết các dự án phụ của tôi xây dựng các tập tin chỉ xác định các dự án phụ thuộc. Phụ thuộc của bên thứ ba được xác định trong tệp xây dựng của dự án siêu.

Có khả năng bao gồm tất cả các mục nhập classpath cần thiết (thư viện bên thứ 3 và các dự án khác) vào đường dẫn tệp kê khai trong siêu trình dự án cho tất cả các tiểu dự án hay không.

+0

Bạn có tuyên bố nhiệm vụ đó cho mọi tiểu dự án không? (Tôi không thấy một 'subprojects {}' block.) Lỗi "không thể thay đổi cấu hình" xảy ra bởi vì bạn đang làm công việc quá sớm (giai đoạn cấu hình thay vì giai đoạn thực hiện). Phụ thuộc dự án được bao gồm chính xác cho tôi. Bạn đang sử dụng phiên bản Gradle nào? –

+0

Tôi đang sử dụng phiên bản gradle 1.0 Hiện tại tôi có mục tiêu jar trong cấu hình 'operation: configure (subprojects.findAll {it.name.endsWith ('Service') || it.name.endsWith ('Common') || it.name.endsWith ('Client')}) ' – user1490402

Trả lời

6

Đây là cách tôi làm cho nó hoạt động. Chỉ nhận phụ thuộc dự án bằng cách sử dụng cuộc gọi:

getAllDependencies().withType(ProjectDependency) 

sau đó thêm nội dung của mỗi libsDir của dự án vào mục nhập Class-Path.

jar { 
    manifest { 
     attributes 'Main-Class': 'com.my.package.Main' 
     def manifestCp = configurations.runtime.files.collect { 
     File file = it 
     "lib/${file.name}" 
     }.join(' ') 


     configurations.runtime.getAllDependencies().withType(ProjectDependency).each {dep-> 

      def depProj = dep.getDependencyProject() 
      def libFilePaths = project(depProj.path).libsDir.list().collect{ inFile-> "lib/${inFile}" }.join(' ') 
      logger.info"Adding libs from project ${depProj.name}: [- ${libFilePaths} -]" 
      manifestCp += ' '+libFilePaths 
     } 

     logger.lifecycle("") 
     logger.lifecycle("---Manifest-Class-Path: ${manifestCp}") 
     attributes 'Class-Path': manifestCp 

    } 

} 
+0

bạn có thể muốn loại bỏ các bản sao từ classpath cuối cùng và sắp xếp chúng bằng cách sử dụng' manifestCp = manifestCp.split ('') .collect(). unique(). sort() .join ('') '... tôi yêu cá cơm – coderatchet

Các vấn đề liên quan