Apache Commons JEXL 3.0 发布,此版本现已提供下载: https://commons.apache.org/jexl/download_jexl.cgi JEXL 3.0 是个重大版本,修改了公共 JEXL API;因为二进制和源代码的不兼容,JEXL 转移到了 org.apache.commons.jexl3 包,Maven artifactId 也改为 commons-jexl3。 JEXL 3.0 现要求 Java 6。 JEXL 3.0 主要改进 ================== * A redesigned API that properly segregates the "public" part and the "internal" parts of JEXL. * A real difference between Expression and Script (scripts accept statements: for, while, etc). * The ability to create JEXL functions in script, closure/variables hoisting/currying included. * A set of assignment operators (+=, *= , ...). * A set of String matching operators (^= startsWith, $= endsWith) and their negative counterparts (!^, !$) * A range operator (x .. y) to ease writing loops (for(var x : 1 .. 10)) * A literal set syntax to ease creating sets: { 1, 2...} 新特性 ==================== * JEXL-178: 'Unsolvable property' message to provide details about underlying exception * JEXL-177: Unified expressions to be used in String literals in JEXL scripts * JEXL-176: Synonym operator name 'in' for operator =~ // Remove 'foreach...in' syntax * JEXL-174: Overloadable property access operators * JEXL-173: Duck-typed java closures * JEXL-170: Implement assignment operators * JEXL-164: public getters for high/low properties for IntegerRange and LongRange * JEXL-152: Extend Range literal to support Long values * JEXL-149: Set Construction as per EL 3.0 spec * JEXL-133: String matching Operator short-hand inspired by CSS3 * JEXL-128: ObjectContext<> should implement NamespaceResolver * JEXL-127: Allow the creation of functions * JEXL-123: Redesign API for stability * JEXL-122: Move JEXL from org.apache.comms.jexl2 to org.apache.commons.jexl3 * JEXL-136: Script calls within scripts may fail with number arguments * JEXL-135: Using map as script parameter or local variable * JEXL-134: Issue with evaluation of concat of variables : \r + \n gives 0 * JEXL-131: UnifiedJexl parsing may fail with NPE * JEXL-130: Ternary Conditional fails for Object values * JEXL-126: Decimal numbers literals should be 'double' by default (instead of 'float') Bugs 修复 ================== * JEXL-184: dot-ed identifiers parsing failure * JEXL-180: Documentation - suggests using float for financials * JEXL-171: Map access operator does not work if key name clashes with map property name * JEXL-169: A string is wrongly identified as FloatingPointNumber * JEXL-168: Dedicated operator for String concatenation * JEXL-79: Add support for growable arrays (ArrayLists) * JEXL-167: Possible loss of value when converting BigDecimal to BigInteger * JEXL-166: Incorrect operator symbol for bitwise complement in jexlArithmetic * JEXL-163: empty(new ("java.lang.Long", 4294967296)) returns true * JEXL-162: empty() function throws an exception : unsupported type * JEXL-160: typo in package.html * JEXL-158: Handle locale decimal separators correctly * JEXL-157: Replace File.pathSeparator with File.separator * JEXL-146: Performance problem in Interpreter.unknownVariable mechanism * JEXL-145: Sandbox calling wrong check (classname vs class) * JEXL-144: Empty array property setting fails * JEXL-142: Map expression issue with empty key * JEXL-141: Suffix for Big Decimal and Big Integer Literal is incorrectly mentioned in Java docs * JEXL-137: Invalid script variable list for nested array/map access 改进列表: http://commons.apache.org/jexl/changes-report.html Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来在应用或者框架中使用。JEXL 受Velocity 和 JSP 标签库 1.1 (JSTL) 的影响而产生的。需要注意的是, JEXL 并不时 JSTL 中的表达式语言的实现。 Apache Commons JEXL 3.0 发布下载地址