2015-12-18 29 views
5

Tôi đang cố gắng thay đổi quá trình xây dựng của chúng tôi từ Maven sang Gradle (V 2.9). Trong Maven tôi đã sử dụng biên dịch trước cho JSP như sau:Biên dịch JSP với Gradle

 <plugin> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-jspc-maven-plugin</artifactId> 
      <version>9.2.7.v20150116</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <id>jspc</id> 
        <goals> 
         <goal>jspc</goal> 
        </goals> 
        <configuration> 
         <excludes>**\/*inc_page_bottom.jsp,**\/*inc_page_top.jsp</excludes> 
         <includes>**\/*.jsp</includes> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

và nó hoạt động tốt. Bây giờ tôi đang cố gắng tìm cách để làm tương tự với gradle. Tôi đã tìm thấy một số thông tin/ví dụ build.gradle nhưng không có gì hoạt động thực sự. Im hiện đang sử dụng Tomcat 7 như servlet container và im lên kế hoạch chuyển đổi trong vài tuần tới 8. Sẽ hoàn hảo để biên dịch chúng cho container servlet đích nhưng trước hết tôi sẽ sẵn lòng biên dịch chúng như tôi đã làm điều này với maven cho/với cầu cảng.

Một phần của build.gradle hiện tại của tôi mà mang lại cho tôi một lỗi:

buildscript { 
    repositories { 
     jcenter() 
    } 

    dependencies { 
     classpath 'com.bmuschko:gradle-tomcat-plugin:2.2.4' 
    } 
} 

apply plugin: 'com.bmuschko.tomcat' 

tomcat { 
    jasper { 
     validateXml = true 
     errorOnUseBeanInvalidClassAttribute = false 
     compilerSourceVM = "1.8" 
     compilerTargetVM = "1.8" 
    } 
} 

task compileJsps(type: JavaCompile, dependsOn: 'clean') { 
    dependsOn tomcatJasper 
    group = 'build' 
    description = 'Translates and compiles JSPs' 
    classpath = configurations.tomcat + sourceSets.main.output + sourceSets.main.runtimeClasspath 
    sourceCompatibility = "1.8" 
    targetCompatibility = "1.8" 
    destinationDir = file("$buildDir/jasper-classes") 
    sourceSets { 
     main { 
      java { 
       srcDir "$buildDir/jasper" 
      } 
     } 
    } 
} 

dependencies { 
    def tomcatVersion = '7.0.59' 
    tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}", 
     "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}", 
     "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}" 
} 

Im nhận được lỗi sau:

:tomcatJasper FAILED 
FAILURE: Build failed with an exception. 
* What went wrong: 
Execution failed for task ':tomcatJasper'. 
> org.apache.jasper.JasperException: file:/xxx/xxx/xxx/xxx/src/main/webapp/index.jsp (line: 6, column: 0) The value for the useBean class attribute xxx.xxx.xxx.XxxXxx is invalid. 

Chạy này jsp trong Tomcat 7 hoạt động tốt ... Có ai có một cập nhật howto hoặc một gợi ý?

+0

Bạn có nhận được câu trả lời về vấn đề này không? Tôi thấy cùng một vấn đề trong maven nơi một <% @ include file = "directives.jsp"%> hoạt động trên máy chủ nhưng không phải trong ngữ cảnh biên dịch trước –

+0

Thật không may, không (và không tìm thấy bất kỳ giải pháp nào cho bản thân ...) – StephanM

+0

Chúng tôi cũng đã từ bỏ việc nâng cấp jdt-core của cầu tàu để có được trình biên dịch jasper tương thích với jre 18u112 –

Trả lời

1

Với gradle, bạn có thể gọi trực tiếp trình biên dịch JSPC. Bằng cách đó nó rõ ràng như những gì đang xảy ra. Chúng tôi đang sử dụng một cái gì đó như sau.

Một vài điều cần lưu ý.

  1. Trình biên dịch JSPC có một sự phụ thuộc vào Ant, do đó cần phải được thêm vào classpath
  2. Trình biên dịch JSPC sử dụng log4j, vì vậy chúng tôi tạo ra một thuộc tính tập tin đầu ra một số đăng nhập cơ bản
  3. Trình biên dịch JSPC được nhúng trong Jetty, đó là một phụ thuộc "providedCompile", do đó trên classpath thời gian chạy của chúng ta.

Dù sao, gradle của chúng tôi tương tự như;

configurations { 
    jspc 
} 

dependencies { 
    jspc 'org.apache.ant:ant:1.10.1' 
} 

def jspSrc = "$projectDir/src/main/webapp" 
def jspJavaSrc = "$buildDir/jsp-java-source" 
def jspPackage = "com.example.jsp" 

task writeJspcProperties(type: WriteProperties) { 
    outputFile = "$buildDir/log4j.jspc.properties" 
    property('log4j.rootLogger', 'WARN, stdout') 
    property('log4j.logger.org.apache', 'INFO, stdout') 
    property('log4j.appender.stdout', 'org.apache.log4j.ConsoleAppender') 
    property('log4j.appender.stdout.Target', 'System.out') 
    property('log4j.appender.stdout.layout', 'org.apache.log4j.PatternLayout') 
    property('log4j.appender.stdout.layout.ConversionPattern', '%d [%C] %m%n') 
} 

task jspToJava(type: JavaExec, dependsOn: [compileJava, writeJspcProperties]) { 

    inputs.dir jspSrc 
    outputs.dir jspJavaSrc 

    File xmlPartial = file("$jspJavaSrc/WEB-INF/web.xml.partial") 

    doFirst { 
     // Create the target WEB-INF folder so the JspC can create the web.xml.partial 
     File webInfFolder = xmlPartial.getParentFile() 
     if (!webInfFolder.exists()) { 
      webInfFolder.mkdirs() 
     } 
    } 

    classpath = configurations.jspc + sourceSets.main.runtimeClasspath 
    main = 'org.apache.jasper.JspC' 
    jvmArgs "-Dlog4j.configuration=file:$buildDir/log4j.jspc.properties" 

    args '-webapp', jspSrc, 
      '-d', jspJavaSrc, 
      '-p', jspPackage, 
      '-webxmlencoding', 'UTF-8', 
      '-webinc', xmlPartial.absolutePath 

    doLast { 
     // Merge the partial XML with the original 
     String originalXML = file("$jspSrc/WEB-INF/web.xml").text 
     String xmlToMerge = xmlPartial.text 
     String mergedXML = originalXML.replaceFirst('(?s)(<web-app.*?>)', '$1' + xmlToMerge) 
     file("$jspJavaSrc/WEB-INF/web.xml").text = mergedXML 
    } 
} 

[Chỉnh sửa; rất đơn giản biên soạn JSP]

0

Trong build.gradle chính của bạn ở phía dưới làm

apply from: 'jspc.gradle' 

Sau đó, tập tin jspc.gradle của bạn trông giống như:

buildscript { 
    repositories { 
     jcenter() 
    } 


    dependencies { 
     classpath 'com.bmuschko:gradle-tomcat-plugin:2.2.5' 
    } 
} 

apply plugin: com.bmuschko.gradle.tomcat.TomcatPlugin 
apply plugin: 'java' 

dependencies { 
    def tomcatVersion = '8.0.42' 
    tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}", 
      "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}", 
      "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}", 
      "javax.servlet:jstl:1.2" 

    providedCompile "javax.servlet:servlet-api:2.5" 

} 

sau đó sử dụng tiền biên dịch làm:

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