2013-04-05 25 views
8

Tôi có một tiểu dự án với một spec chiến tranh trông như thế này:Gradle -> Làm thế nào để bỏ qua một số lọ từ WEB-INF/lib

war { 
    from('resources') { 
     include '*.properties' 
     into 'WEB-INF/classes/' 
    }  
    webXml = file('src/main/webapp/WEB-INF/web.xml') 
} 

Các công trình lớn. Tạo ra một tập tin chiến tranh chất béo duy nhất có thể triển khai với Tomcat. Vấn đề là, khi triển khai với TomEE và JBoss, tôi gặp phải xung đột (ví dụ với Javax Servlet, Jersey, v.v.). Vì vậy, tôi muốn loại trừ một bộ lọ không bị war'd. Tôi nhìn vào tài liệu chiến tranh Gradle, và có vẻ như tôi cần phải sử dụng loại trừ cho việc này. Tôi đã thử nó hai cách khác nhau, và các lọ không bị loại trừ từ chiến tranh:

war { 

    // copy properties file in classes so that 
    // they may be loaded from classpath 
    from('resources') { 
     include '*.properties' 
     into 'WEB-INF/classes/' 
    } 

    // specify web xml 
    webXml = file('src/main/webapp/WEB-INF/web.xml') 

    // remove jars that conflict with TomEE 
    exclude '**/javax.inject-1.jar' 
    exclude '**/javax.servlet-2.5.0.v201103041518.jar' 
    exclude '**/servlet-api-2.5.jar' 
    exclude '**/validation-api-1.0.0.GA.jar' 

} 

Đây là một tiểu dự án (Karyon-ví dụ) trong dự án NetFlix/Karyon lưu trữ trên github. Sự phụ thuộc vào các tiểu dự án giống như thế này:

dependencies { 
    compile 'org.slf4j:slf4j-api:1.7.0' 
    runtime 'org.slf4j:slf4j-simple:1.7.0' 
    compile project(':karyon-extensions') 
    compile project(':karyon-admin-web') 
} 

Và tôi muốn tránh chỉnh sửa những thứ như biên dịch so với phụ thuộc thời gian chạy, đặc biệt là trong các tập tin và các tiểu dự án khác. Trong thực tế các lọ tôi đang cố gắng để loại trừ ở trên là lành tính khi chạy với cầu cảng và tomcat thường xuyên.

Tôi chỉ muốn loại trừ các lọ này mà không làm phức tạp các tập lệnh xây dựng. Tôi đang thiếu gì?

Cảm ơn

Trả lời

8

cách rõ ràng để đi là để di chuyển các phụ thuộc bạn không muốn có trong cuộc chiến của bạn từ cấu hình compile-providedCompileruntime-providedRuntime. các cấu hình được cung cấp sẽ được thêm vào bản dựng của bạn khi plugin chiến tranh được áp dụng.

Một lưu ý khác trên đoạn mã của bạn ở trên: Tôi cho rằng loại trừ không hoạt động vì bạn tham chiếu đường dẫn đích trong câu lệnh loại trừ của mình thay vì bạn chỉ cần tham chiếu nó theo /servlet-api-2.5.jar.

+2

@ Rob - 'providedRuntime' có lẽ là con đường để đi. Nó chỉ có nghĩa là thư viện sẽ không được thêm vào tập tin chiến tranh. Bạn có thể sử dụng 'exclude' nhưng tiếc là nó không có giấy tờ và rất khó hiểu về cách thực hiện nó. – david

0

bạn có thể theo cách này

dependencies { 
    compile fileTree(dir: 'WebContent/WEB-INF/lib', include: ['*.jar']) 
    compile("org.apache.tomcat:tomcat-jni:8.0.37") 
    providedRuntime("org.apache.tomcat:tomcat-jni:8.0.37") 

}

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