我在JSP编译期间遇到了jspc-maven-plugin版本2-0 alpha 3的问题。我的大多数JSP编译得很好,但有一些依赖于我在POM中列出的JAR依赖项(dam_classes)中包含的类:
<plugin>
<groupId>org.codehaus.mojo.jspc</groupId>
<artifactId>jspc-maven-plugin</artifactId>
<version>2.0-alpha-3</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<sources>
<directory>${basedir}/target/${project.build.finalName}</directory>
<includes>
<include>**/*.jsp</include>
</includes>
</sources>
<verbose>1</verbose>
<inputWebXml>${basedir}/target/${project.build.finalName}/WEB-INF/web.xml</inputWebXml>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.fmr.AP100141.com.documentum</groupId>
<artifactId>dam_classes</artifactId>
<version>6.7.2000.0038</version>
</dependency>
<dependency>
<groupId>org.codehaus.mojo.jspc</groupId>
<artifactId>jspc-compiler-tomcat6</artifactId>
<version>2.0-alpha-3</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</plugin>
当我运行mvn -X软件包并检查调试输出时,我看到以下消息:
[ERROR] An error occurred at line: 31 in the jsp file: /custom/dam/environment/preferences/general/app_general_preferences.jsp
[ERROR] com.documentum.web.form.control cannot be resolved to a type
[ERROR] 28: <dmf:label nlsid="MSG_START_SECTION_HEADER"/></td>
[ERROR] 29: <td class="defaultcolumnspacer leftAlignment" valign="top" >: </td>
[ERROR] 30: <td class="leftAlignment" valign="top" style="padding-left: 10px">
[ERROR] 31: <dmf:datadropdownlist name="<%=AppGeneralPreferences.CONTROL_SECTIONS%>" tooltipnlsid="MSG_START_SECTION_HEADER" postfixassociatedlabelnlsid="MSG_START_SECTION_DESCRIPTION">
[ERROR] 32: <dmf:dataoptionlist>
[ERROR] 33: <dmf:option datafield="id" labeldatafield="label"/>
[ERROR] 34: </dmf:dataoptionlist>
它似乎无法找到com.documentum.web.form.control包,即使它显式位于类路径上(同样,根据调试输出):
[DEBUG](f)classpathElements = [C:\ Users \ a392841 \ workspace \ eContent-damtop \ eContent-damtop-war \ target \ classes, C:\ Users \用户a392841 \工作空间\电子内容-damtop \电子内容-damtop战.... \电子内容的工件\电子内容的工件共用\目标\ fid_commons.jar, C:\ Users \用户a392841 \工作空间\电子内容-damtop \电子内容-damtop战.... \电子内容的工件\电子内容的工件 - 转炉\目标\电子内容-BOF-all.jar在, C:\ Users \ a392841.m2 \ repository \ com \ fmr \ AP100141 \ com \ documentum \ dam_classes \ 6.7.2000.0038 \ dam_classes-6.7.2000.0038.jar ,...
我甚至仔细检查了dam_classes-6.7.2000.0038.jar,以确保它确实包含JSP的那一行引用的包和类。
作为参考,这里是引用该类的JSP和相关标记库。
JSP
<%
//
%>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page errorPage="/wdk/errorhandler.jsp" %>
<%@ taglib uri="/WEB-INF/tlds/dmform_1_0.tld" prefix="dmf" %>
<%@ taglib uri="/WEB-INF/tlds/dmformext_1_0.tld" prefix="dmfx" %>
<%@ page import="com.fmr.fwp.webtop.preferences.general.AppGeneralPreferences,
com.documentum.webcomponent.environment.preferences.general.GeneralPreferences" %>
<%@ page import="com.documentum.web.common.AccessibilityService" %>
<html>
<head>
<dmf:webform/>
</head>
<body class='contentBackground'>
<dmf:form autofocusneeded='true'>
<table cellspacing=0 cellpadding=0 border=0>
<tr>
<td colspan="3" class="spacer" height="10"> </td>
</tr>
<tr height="43">
<td class="fieldlabel rightAlignment nowrap" valign="top" scope="row" >
<% if (AccessibilityService.isAllAccessibilitiesEnabled())
{ %>
<dmf:button onclick="doNothing" src="icons/info.gif" tooltipnlsid="MSG_MESSAGE" runatclient="true"/>
<script type="text/javascript"> function doNothing(){ return false;} </script>
<% } %>
<dmf:label nlsid="MSG_START_SECTION_HEADER"/></td>
<td class="defaultcolumnspacer leftAlignment" valign="top" >: </td>
<td class="leftAlignment" valign="top" style="padding-left: 10px">
<dmf:datadropdownlist name="<%=AppGeneralPreferences.CONTROL_SECTIONS%>" tooltipnlsid="MSG_START_SECTION_HEADER" postfixassociatedlabelnlsid="MSG_START_SECTION_DESCRIPTION">
<dmf:dataoptionlist>
<dmf:option datafield="id" labeldatafield="label"/>
</dmf:dataoptionlist>
</dmf:datadropdownlist>
<dmf:label nlsid="MSG_START_SECTION_DESCRIPTION" cssclass="noteWithoutPadding"/>
</td>
</tr>
<tr>
<tr height="30"><td colspan=3><HR></td></tr>
<tr height="43">
<td class="fieldlabel rightAlignment" valign="top" scope="row" >
<dmf:label cssclass='fieldlabel' nlsid="MSG_CHOOSE_THEME_HEADER"/>
</td>
<td class="defaultcolumnspacer leftAlignment" valign="top" >: </td>
<td class="leftAlignment" valign="top" style="padding-left: 10px">
<dmf:datadropdownlist name="<%=AppGeneralPreferences.CONTROL_RESOURCE_FOLDERS%>" tooltipnlsid="MSG_CHOOSE_THEME_HEADER" postfixassociatedlabelnlsid="MSG_CHOOSE_THEME_DESCRIPTION">
<dmf:dataoptionlist>
<dmf:option datafield="value" labeldatafield="value"/>
</dmf:dataoptionlist>
</dmf:datadropdownlist>
<dmf:label nlsid="MSG_CHOOSE_THEME_DESCRIPTION" cssclass='noteWithoutPadding'/>
</td>
</tr>
<tr><td colspan=3> </td></tr>
<!-- CHANGES DISPLAY SHOW ALL OBJECTS AND SHOW ALL VERSIONS -->
<dmf:panel name="displayHiddenObjectPanel">
<tr>
<td colspan="3" class="spacer" height="20"> </td>
</tr>
<tr>
<td class="fieldlabel" align="right" valign="top" scope="row">
<dmf:label nlsid='MSG_SHOW_ALL_OBJECTS'/>
</td>
<td class="defaultcolumnspacer" align="left" valign="top"> </td>
<td align="left" valign="top">
<dmf:checkbox name='<%=AppGeneralPreferences.CONTROL_SHOW_ALL_OBJECTS_OPTION%>'
tooltipnlsid='MSG_ALL_OBJECTS'/><dmf:label nlsid='MSG_ALL_OBJECTS'/>
</td>
</tr>
</dmf:panel>
<dmf:panel name="displayHiddenObjectPanel">
<tr>
<td colspan="3" class="spacer" height="20"> </td>
</tr>
<tr>
<td class="fieldlabel" align="right" valign="top" scope="row">
<dmf:label nlsid='MSG_SHOW_ALL_VERSIONS'/>
</td>
<td class="defaultcolumnspacer" align="left" valign="top"> </td>
<td align="left" valign="top">
<dmf:checkbox name='<%=AppGeneralPreferences.CONTROL_SHOW_ALL_VERSION_OPTION%>'
tooltipnlsid='MSG_ALL_VERSIONS'/><dmf:label nlsid='MSG_ALL_VERSIONS'/>
</td>
</tr>
</dmf:panel>
<!--- CHANGES DISPLAY ALL OBJECTS AND VERSIONS ENDS -->
<tr><td colspan=3> </td></tr>
<dmf:panel name="enableDragDropPluginPanel">
<tr height="57">
<td class="fieldlabel rightAlignment nowrap" valign="top" scope="row" >
<dmf:label nlsid="MSG_DRAG_DROP_PLUGIN_OPTION"/>
</td>
<td class="defaultcolumnspacer leftAlignment" valign="top" >: </td>
<td class="leftAlignment" valign="top" style="padding-left: 10px">
<dmf:checkbox name='<%=AppGeneralPreferences.CONTROL_DRAG_DROP_PLUGIN_OPTION%>'
tooltipnlsid="MSG_DRAG_DROP_PLUGIN_OPTION"/><dmf:label nlsid="MSG_DRAG_DROP_PLUGIN_OPTION_DESCRIPTION"/>
<dmf:label nlsid="MSG_DRAG_DROP_NOTE" cssclass='noteWithoutPadding'/>
</td>
</tr>
</dmf:panel>
<%--ole scan panel --%>
<dmf:panel name="oleScanPanel">
<tr>
<td class="fieldlabel rightAlignment nowrap" valign="top" scope="row" >
<dmf:label nlsid="MSG_OLE_SCAN_ENABLE"/>
</td>
<td class="defaultcolumnspacer leftAlignment" valign="top" >: </td>
<td class="leftAlignment" valign="top" style="padding-left: 10px">
<dmf:checkbox name='<%=AppGeneralPreferences.CONTROL_OLE_SCAN_ENABLE%>'
tooltipnlsid="MSG_OLE_SCAN_ENABLE"/><dmf:label nlsid="MSG_OLE_SCAN_ENABLE_DESCRIPTION"/>
<dmf:label nlsid="MSG_OLE_SCAN_NOTE" cssclass='noteWithoutPadding'/>
</td>
</tr>
</dmf:panel>
<tr>
<td class="fieldlabel rightAlignment nowrap" valign="top" scope="row">
<dmf:label cssclass="fieldlabel" nlsid="MSG_ACCESSIBILITY_OPTION"/>
</td>
<td class="defaultcolumnspacer leftAlignment" valign="top">: </td>
<td class="leftAlignment" valign="top" style="padding-left: 10px">
<dmf:checkbox name='<%=AppGeneralPreferences.CONTROL_ACCESSIBILITY_OPTION%>'
tooltipnlsid="MSG_ACCESSIBILITY_OPTION" postfixassociatedlabelnlsid="MSG_ACCESSIBILITY_OPTION_NOTE"/>
<dmf:label nlsid="MSG_ACCESSIBILITY_OPTION_DESCRIPTION"/>
<dmf:label nlsid="MSG_ACCESSIBILITY_OPTION_NOTE" cssclass='noteWithoutPadding'/>
</td>
</tr>
<dmf:panel name="restorePreferencesPanel">
<tr height="30">
<td colspan=3><HR></td>
</tr>
<tr>
<td class="defaultcolumnspacer leftAlignment" valign="top" colspan="2"></td>
<td class="leftAlignment" valign="top" style="padding-left: 10px">
<dmf:link name='restorePreferences' onclick="onClickRestorePreferences"
nlsid="MSG_RESTORE_PREFERENCES" postfixassociatedlabelnlsid="MSG_RESTORE_TO_DEFAULT_PREFERENCES" cssclass='miniButton'/>
<dmf:label nlsid='MSG_RESTORE_TO_DEFAULT_PREFERENCES'/>
</td>
</tr>
</dmf:panel>
</table>
</dmf:form>
</body>
</html>
TLD (适用于相关课程的代码段)
<tag>
<name>datadropdownlist</name>
<tagclass>com.documentum.web.form.control.databound.DataDropDownListTag</tagclass>
<bodycontent>jsp</bodycontent>
<attribute>
<name>id</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
ID for the control. The ID is generated by the framework. You
can also set the ID in the JSP.
</description>
</attribute>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>
Sets the name for the control. Named controls are cached on the
server. Controls with the same name are automatically indexed.
</description>
</attribute>
<attribute>
<name>value</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Sets the currently selected value.
</description>
</attribute>
<attribute>
<name>enabled</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Sets whether the control is enabled.
</description>
</attribute>
<attribute>
<name>visible</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Sets whether the control is rendered as visible or hidden.
</description>
</attribute>
<attribute>
<name>width</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Width of the data drop-down list control
</description>
</attribute>
<attribute>
<name>query</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Displays a query or recordset as a drop down list. Use the
dataoptionlist tag within datadropdownlist for databound values.
Use an option tag within datadropdownlist for static output. The DQL
query that is passed to the data provider has the following form:
query="select r_object_id, user_name from dm_user where user_name
like 'a%' "
</description>
</attribute>
<attribute>
<name>style</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
A cascading style sheet rule enclosed in quotation marks; for
example: style="{COLOR: darkmagenta; TEXT-DECORATION: underline}"
</description>
</attribute>
<attribute>
<name>cssclass</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Sets the cascading style sheet class that is used to format the control.
</description>
</attribute>
<attribute>
<name>onchange</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Sets the event that is fired when the control is changed by the
user. The onchange event handler cannot run on the client
(runatclient cannot be true). The onchange event is not handled
immediately. It is handled on the server only when the form is
submitted (for example, by an onclick event).
</description>
</attribute>
<attribute>
<name>onselect</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Sets the event that is fired when the user selects the control, such
as an option in a list. The onselect event is handled immediately,
either on the server (when runatclient=="false") or on the client
(when runatclient=="true").
</description>
</attribute>
<attribute>
<name>runatclient</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Specifies that the event should run on the client, not the server.
The onchange event cannot run on the client.
</description>
</attribute>
<attribute>
<name>focus</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Set to true to enable the control to accept focus.
</description>
</attribute>
<attribute>
<name>tabindex</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
TBD.
</description>
</attribute>
<attribute>
<name>tooltip</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Sets the string that will be displayed on browser mouseover.
</description>
</attribute>
<attribute>
<name>tooltipnlsid</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Sets the NLS key to look up a localized tooltip string.
</description>
</attribute>
<attribute>
<name>autocompleteenabled</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Enables (True) or disables (False) autocompletion on the control.
Default is True.
</description>
</attribute>
<attribute>
<name>autocompleteid</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Key that is used to store the autocomplete list in the user
preferences. You can set the same ID on two text controls, for
example, if they share the same set of suggestions. If the control
has no ID specified, the ID will be generated based on the form
id and text control name, in the form consisting of
formid_controlid. For docbaseattribute controls that render a text
control, an ID is generated using the attribute name, for example,
keyword or title.
</description>
</attribute>
<attribute>
<name>maxautocompletesuggestionsize</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Number of matching suggestions to display to the user. Default
is 10.
</description>
</attribute>
<attribute>
<name>prefixassociatedlabelnlsid</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Specified label NLS string is prefixed to the control's
existing title, helps accessibility users in obtaining
contextual information.
</description>
</attribute>
<attribute>
<name>postfixassociatedlabelnlsid</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
Specified label NLS string is postfixed to the control's
existing title, helps accessibility users in obtaining
contextual information.
</description>
</attribute>
</tag>
我觉得我已经筋疲力尽了,为什么JSPC插件找不到提到的包,即使它明确地在类路径上,我也很困惑。任何评论或反馈将不胜感激。我对Maven比较新,但这是我遇到的第一个真正的益智游戏。
感谢。 -K