<jsp:invoke fragment=""/>的理解和使用

本文介绍如何使用JSP2.0的Fragment技术实现页面布局管理,通过示例展示了在不依赖第三方软件的情况下,如何自定义template.tag文件及index.jsp文件来达到类似Apache Tiles的效果。
在传统 JSP 中,想要实现页面布局管理比较麻烦,为了解决在 JSP 中布局的问题,出现了很多开源软件,比如 Apache Tiles 和 SiteMesh 就是其中比较优秀的。但是使用开源软件实现布局或多或少会产生一些性能问题,有没有办法在不依赖第三方开源软件的情况下,使用 JSP 本身来实现页面布局呢?
JSP 2.0 引入了 Fragment 技术,使用 Fragment 技术可以在 JSP 中实现类似 Tiles 和 SiteMesh 的页面布局管理。
下面的例子说明了如何使用 Fragment 实现页面布局。
1、首先在 WEB-INF/tags 文件夹中创建 template.tag 文件:

[html] view plaincopy
<%@tag description="template 1" pageEncoding="UTF-8"%>
<%@attribute name="header" fragment="true" %>
<%@attribute name="footer" fragment="true" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<jsp:invoke fragment="header"/>
<jsp:doBody/>
<jsp:invoke fragment="footer"/>
</body>
</html>

在 tag 文件头部申明了两个 attribute 分别是 header 和 footer。在 <body> 标签中调用了这两个 attribute 所对应的 fragment。jsp:invoke 和 jsp:doBody 中的具体内容会被 jsp 中的内容替换。现在编写 index.jsp。
2、创建 index.jsp 文件
<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<%@ taglib prefix="t" tagdir="/WEB-INF/tags/"%>
http://write.blog.youkuaiyun.com/postedit
<t:template>
<jsp:attribute name="header">
这里的内容显示在头部。
</jsp:attribute>
<jsp:attribute name="footer">
这里的内容显示在尾部。
</jsp:attribute>
<jsp:body>
这里显示正文内容:Hello World!
</jsp:body>
</t:template>

jsp:attribute 标签中的内容将会替换 template.tag 中 jsp:invoke 的内容,name 属性对应 fragment 属性。
如果访问 index.jsp 页面,可以看到显示的内容会按照 template.tag 中设计的样式来进行布局
19-May-2025 21:18:48.804 严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke 调用方法[manageApp]时发生异常 java.lang.IllegalStateException: 启动子级时出错 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:602) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:654) at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1796) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:264) at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814) at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:422) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:376) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:264) at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814) at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802) at java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:472) at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1472) at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1310) at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1412) at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:842) Caused by: org.apache.catalina.LifecycleException: 无法启动组件[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/LibraryProject_war_exploded]] at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:406) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:179) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599) ... 42 more Caused by: java.lang.IllegalArgumentException: 找到多个名为[spring_web]的片段。这是不合法的相对排序。有关详细信息,请参阅Servlet规范的第8.2.2 2c节。考虑使用绝对排序。 at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2175) at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2131) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1264) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:973) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:290) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4342) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ... 43 more 19-May-2025 21:18:48.807 严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke 调用方法[createStandardContext]时发生异常 javax.management.RuntimeOperationsException: 调用方法[manageApp]时发生异常 at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:274) at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814) at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:422) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:376) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:264) at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814) at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802) at java.management/com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:472) at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1472) at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1310) at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1412) at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:842) Caused by: java.lang.IllegalStateException: 启动子级时出错 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:602) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:654) at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1796) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:264) ... 34 more Caused by: org.apache.catalina.LifecycleException: 无法启动组件[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/LibraryProject_war_exploded]] at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:406) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:179) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599) ... 42 more Caused by: java.lang.IllegalArgumentException: 找到多个名为[spring_web]的片段。这是不合法的相对排序。有关详细信息,请参阅Servlet规范的第8.2.2 2c节。考虑使用绝对排序。 at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2175) at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2131) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1264) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:973) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:290) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4342) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ... 43 more
05-20
If you need the full list of all 68 published versions run "$ pnpm view scheduler versions". <span class="timestamp">10:31:29</span> [strong] [ERROR] 【执行编译】执行编译失败 [/strong] <span class="timestamp">10:31:29</span> [strong] [ERROR] 执行编译失败 [/strong] <span class="timestamp">10:31:29</span> cmb.devops.platform.exception.CliExecuteCommandException: 执行编译失败 <span class="timestamp">10:31:29</span> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) <span class="timestamp">10:31:29</span> at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) <span class="timestamp">10:31:29</span> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) <span class="timestamp">10:31:29</span> at java.lang.reflect.Constructor.newInstance(Constructor.java:423) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247) <span class="timestamp">10:31:29</span> at cmb.devops.platform.service.build.BuildService.execCommand(BuildService.groovy:92) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) <span class="timestamp">10:31:29</span> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) <span class="timestamp">10:31:29</span> at java.lang.reflect.Method.invoke(Method.java:498) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166) <span class="timestamp">10:31:29</span> at cmb.devops.platform.service.build.BuildService.execCommandWithStorageStrategy(BuildService.groovy:83) <span class="timestamp">10:31:29</span> at cmb.devops.platform.service.build.BuildService$execCommandWithStorageStrategy$1.call(Unknown Source) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) <span class="timestamp">10:31:29</span> at cmb.devops.platform.phase.BuildPhase.doExec(BuildPhase.groovy:196) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) <span class="timestamp">10:31:29</span> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) <span class="timestamp">10:31:29</span> at java.lang.reflect.Method.invoke(Method.java:498) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) <span class="timestamp">10:31:29</span> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:810) <span class="timestamp">10:31:29</span> at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:46) <span class="timestamp">10:31:29</span> at cmb.devops.platform.aop.AopAspect.super$2$invokeMethod(AopAspect.groovy) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) <span class="timestamp">10:31:29</span> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) <span class="timestamp">10:31:29</span> at java.lang.reflect.Method.invoke(Method.java:498) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) <span class="timestamp">10:31:29</span> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:132) <span class="timestamp">10:31:29</span> at cmb.devops.platform.aop.AopAspect$_invokeMethod_closure1.doCall(AopAspect.groovy:17) <span class="timestamp">10:31:29</span> at cmb.devops.platform.aop.AopAspect$_invokeMethod_closure1.doCall(AopAspect.groovy) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) <span class="timestamp">10:31:29</span> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) <span class="timestamp">10:31:29</span> at java.lang.reflect.Method.invoke(Method.java:498) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) <span class="timestamp">10:31:29</span> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) <span class="timestamp">10:31:29</span> at cmb.devops.platform.aop.AopAspect.invokeMethod(AopAspect.groovy:23) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.call(PogoInterceptableSite.java:48) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.callCurrent(PogoInterceptableSite.java:58) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166) <span class="timestamp">10:31:29</span> at cmb.devops.platform.phase.BuildPhase.exec(BuildPhase.groovy:92) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) <span class="timestamp">10:31:29</span> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) <span class="timestamp">10:31:29</span> at java.lang.reflect.Method.invoke(Method.java:498) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) <span class="timestamp">10:31:29</span> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:810) <span class="timestamp">10:31:29</span> at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:46) <span class="timestamp">10:31:29</span> at cmb.devops.platform.aop.AopAspect.super$2$invokeMethod(AopAspect.groovy) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) <span class="timestamp">10:31:29</span> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) <span class="timestamp">10:31:29</span> at java.lang.reflect.Method.invoke(Method.java:498) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) <span class="timestamp">10:31:29</span> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:132) <span class="timestamp">10:31:29</span> at cmb.devops.platform.aop.AopAspect$_invokeMethod_closure1.doCall(AopAspect.groovy:17) <span class="timestamp">10:31:29</span> at cmb.devops.platform.aop.AopAspect$_invokeMethod_closure1.doCall(AopAspect.groovy) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) <span class="timestamp">10:31:29</span> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) <span class="timestamp">10:31:29</span> at java.lang.reflect.Method.invoke(Method.java:498) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) <span class="timestamp">10:31:29</span> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) <span class="timestamp">10:31:29</span> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) <span class="timestamp">10:31:29</span> at cmb.devops.platform.aop.AopAspect.invokeMethod(AopAspect.groovy:23) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.call(PogoInterceptableSite.java:48) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) <span class="timestamp">10:31:29</span> at cmb.devops.platform.factory.BuildFactory.runExec(BuildFactory.groovy:114) <span class="timestamp">10:31:29</span> at cmb.devops.platform.factory.BuildFactory.exec(BuildFactory.groovy:99) <span class="timestamp">10:31:29</span> at cmb.devops.platform.factory.BuildFactory$exec.call(Unknown Source) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) <span class="timestamp">10:31:29</span> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) <span class="timestamp">10:31:29</span> at cmb.devops.platform.App.main(App.groovy:42) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <span class="timestamp">10:31:29</span> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) <span class="timestamp">10:31:29</span> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) <span class="timestamp">10:31:29</span> at java.lang.reflect.Method.invoke(Method.java:498) <span class="timestamp">10:31:29</span> at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) <span class="timestamp">10:31:29</span> at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) <span class="timestamp">10:31:29</span> at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) <span class="timestamp">10:31:29</span> at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
最新发布
10-17
当在使用pnpmGroovy代码编译时出现CliExecuteCommandException异常导致编译失败,可尝试以下解决方法: ### 检查pnpm相关依赖 - **更新pnpm版本**:旧版本的pnpm可能存在一些已知的bug,更新到最新版本可能会解决问题。可以使用以下命令更新pnpm: ```bash pnpm add -g pnpm ``` - **清理pnpm缓存**:缓存文件可能损坏,清理缓存后重新安装依赖。使用以下命令清理缓存: ```bash pnpm store prune ``` 然后删除`node_modules`目录`pnpm-lock.yaml`文件,重新安装依赖: ```bash pnpm install ``` ### 检查Groovy环境 - **检查Groovy版本**:确保使用的Groovy版本与项目兼容。可以通过以下命令查看Groovy版本: ```bash groovy --version ``` 如果版本不兼容,可下载并安装合适的版本。 - **检查Groovy环境变量**:确保`GROOVY_HOME`、`PATH`等环境变量配置正确。在Linux或macOS系统中,可以编辑`~/.bashrc`或`~/.zshrc`文件添加如下内容: ```bash export GROOVY_HOME=/path/to/groovy export PATH=$GROOVY_HOME/bin:$PATH ``` 在Windows系统中,需要在系统环境变量中添加相应配置。 ### 检查命令执行权限 - **权限不足**:在某些情况下,执行pnpm或Groovy命令可能因为权限不足而失败。确保当前用户对项目目录有足够的读写执行权限。在Linux或macOS系统中,可以使用以下命令修改权限: ```bash chmod -R 755 /path/to/project ``` ### 检查命令参数脚本 - **命令参数错误**:检查执行pnpmGroovy编译的命令参数是否正确。例如,检查pnpm命令的脚本名称、Groovy编译命令的源文件路径等。 - **脚本错误**:检查Groovy代码本身是否存在语法错误或逻辑错误。可以使用Groovy的静态代码分析工具进行检查。 ### 查看详细日志 - **查看异常详细信息**:CliExecuteCommandException异常通常会包含详细的错误信息,查看日志文件或控制台输出,定位具体的错误原因,根据错误信息进行针对性解决。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值