【问题标题】:Netbeans fails to compile JSP in projects created on different OSNetbeans 无法在不同操作系统上创建的项目中编译 JSP
【发布时间】:2013-11-06 16:50:32
【问题描述】:

当项目在不同的操作系统上创建时,在netbeans +7.2中编译项目时发生下一个错误

compile-jsps:
    [mkdir] Created dir: /var/lib/jenkins/jobs/workspace/build/generated/src
     [java] Nov 05, 2013 4:47:29 PM org.apache.jasper.runtime.TldScanner scanJar
     [java] WARNING: PWC6351: In TLD scanning, the supplied resource file:/var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/ant.jar;/var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/servlet3.1-jsp2.3-api.jar;/var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/glassfish-jspparser-4.0.jar;/var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/jstl-impl.jar;/var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/javax.faces.jar does not exist
     [java] java.io.FileNotFoundException: /var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/ant.jar;/var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/servlet3.1-jsp2.3-api.jar;/var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/glassfish-jspparser-4.0.jar;/var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/jstl-impl.jar;/var/lib/jenkins/jobs/workspace/lib/jsp-compilation-syscp/javax.faces.jar (No such file or directory)
     [java]     at java.util.zip.ZipFile.open(Native Method)
     [java]     at java.util.zip.ZipFile.<init>(ZipFile.java:214)
     [java]     at java.util.zip.ZipFile.<init>(ZipFile.java:144)
     [java]     at java.util.jar.JarFile.<init>(JarFile.java:152)
     [java]     at java.util.jar.JarFile.<init>(JarFile.java:89)
     [java]     at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:93)
     [java]     at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69)
     [java]     at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:88)
     [java]     at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
     [java]     at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:89)
     [java]     at org.apache.jasper.runtime.TldScanner.scanJar(TldScanner.java:442)
     [java]     at org.apache.jasper.runtime.TldScanner.scanJars(TldScanner.java:694)
     [java]     at org.apache.jasper.runtime.TldScanner.scanTlds(TldScanner.java:350)
     [java]     at org.apache.jasper.runtime.TldScanner.getLocation(TldScanner.java:283)
     [java]     at org.apache.jasper.JspCompilationContext.getTldLocation(JspCompilationContext.java:589)
     [java]     at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:500)
     [java]     at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:582)
     [java]     at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1657)
     [java]     at org.apache.jasper.compiler.Parser.parse(Parser.java:185)
     [java]     at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
     [java]     at org.apache.jasper.compiler.ParserController.parse(ParserController.java:145)
     [java]     at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:212)
     [java]     at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
     [java]     at org.apache.jasper.JspC.processFile(JspC.java:1171)
     [java]     at org.apache.jasper.JspC.execute(JspC.java:1338)
     [java]     at org.netbeans.modules.web.project.ant.JspC.main(JspC.java:101)
     [java] 
     [java] org.apache.jasper.JasperException: file:/var/lib/jenkins/jobs/workspace/build/web/WEB-INF/auth.jsp(10,61) PWC6188: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application

【问题讨论】:

    标签: java jsp netbeans jenkins operating-system


    【解决方案1】:

    这是一个问题,Netbeans 如何使用 sysClasspath 参数调用 JspC apache 编译器。您可以在 netbeans bug #198480 上查看 mor 信息

    我个人更喜欢将构建系统更改为 Maven,但这是一个庞大而复杂的项目。此外,我不想修改系统生成的文件,如 build-impl.xml,所以我更愿意等待将来的 NB 更新会破坏(或修复)某些东西,然后手动更新属性文件。

    我使用自定义 build.xml 修改而不更改 build-impl.xml 来搜索并改进此错误中的解决方案。下一个代码解决了我的问题:

    <!-- workaround bug https://netbeans.org/bugzilla/show_bug.cgi?id=198480 -->
    <target name="checkos">
        <echo message="OS Name is:         ${os.name}"/>
        <echo message="OS Architecture is: ${os.arch}"/>
        <echo message="OS Version is:      ${os.version}"/>
        <condition property="is_windows">
            <os family="windows"/>
        </condition>
        <condition property="is_linux">
            <os family="unix"/>
        </condition>
    </target>
    <target name="patch-bug-198480-windows" if="is_windows" depends="checkos">
        <copy file="lib/nblibraries-syscp-windows.properties" tofile="lib/nblibraries-private.properties"/>
    </target>
    <target name="patch-bug-198480-linux" if="is_linux" depends="checkos">
        <copy file="lib/nblibraries-syscp-linux.properties" tofile="lib/nblibraries-private.properties"/>
    </target>
    
    <target name="-post-clean">
        <delete file="lib/nblibraries-private.properties"/>
    </target>
    
        <target name="-pre-init" depends="patch-bug-198480-windows,patch-bug-198480-linux">
    

    我考虑到 libs.jsp-compilation-syscp.claspath 仅在 buidl-impl.xml 中的两个地方使用,并且此修改不会改变行为

    文件 nblibraries-syscp-linux.properties

    libs.jsp-compilation-syscp.classpath=\
        ${base}/jsp-compilation-syscp/ant.jar:\
        ${base}/jsp-compilation-syscp/servlet3.1-jsp2.3-api.jar:\
        ${base}/jsp-compilation-syscp/glassfish-jspparser-4.0.jar:\
        ${base}/jsp-compilation-syscp/jstl-impl.jar:\
        ${base}/jsp-compilation-syscp/javax.faces.jar
    libs.jsp-compilation-syscp.displayName=JSP Compilation Sysclasspath
    

    文件 nblibraries-syscp-windows.properties

    libs.jsp-compilation-syscp.classpath=\
        ${base}/jsp-compilation-syscp/ant.jar;\
        ${base}/jsp-compilation-syscp/servlet3.1-jsp2.3-api.jar;\
        ${base}/jsp-compilation-syscp/glassfish-jspparser-4.0.jar;\
        ${base}/jsp-compilation-syscp/jstl-impl.jar;\
        ${base}/jsp-compilation-syscp/javax.faces.jar
    libs.jsp-compilation-syscp.displayName=JSP Compilation Sysclasspath
    

    重要提示:您应该记住在 NetBeans 升级时更新这些文件

    【讨论】:

    • 或者您可以迁移到其他构建器工具,例如 maven。
    • 当然,但这不是一个简单的解决方案,具体取决于项目。另一方面,我们计划在未来迁移到 Maven。谢谢
    • 另一种解决方案是仅使用项目的源代码在 IDE 中创建项目。这样,您的 Java 代码就不会受到 IDE 特定属性的影响。
    • 对不起@Luiggy Mendoza,但我不理解您的最后评论。我需要编译jsp,而Netbeans使用这种项目。当然:我们很快就会迁移到 maven。
    • 我的意思是,您只保留源代码,即包含 java 代码、JSP、JS、CSS、图像和其他资源的包,并将这些文件仅保存在存储库中(使用 SVN、Git 或其他工具甚至是手动创建和维护的简单文件夹),然后在每个操作系统上从这些源中在您的 Netbeans(或其他 IDE)中创建一个新项目,因此这些项目共享相同的源但不同的 IDE 特定项目属性(如 ant 文件)。
    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2016-02-03
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多