Core Development Tools Update Java 9, Jenkins, Maven… Will Iverson Co-owner, Dev9
• Will Iverson • Co-owner, Dev9 • Professional software dev/ architect/consultant since 1995 • Roles: Apple, Symantec, SolutionsIQ • Clients: Sun, BEA, Canal+, T-Mobile, at&t, Microsoft, State of WA, many other local firms… • 4 books, many articles
• 2015 – VR, 20 Years of Java & CMS • 2013 – Greenfield Java • 2012 – JPA/Hibernate & myBatis • 2011 – Session Management, Selenium • 2010 – Play Framework • 2010 – CSI: Java - Dead JVM Analysis • 2009 – Maven • …
• Where are things with Java 9, Jenkins 2, and Maven? • In this session we'll look at the status of the major updates to core development tools, including (where applicable) demos of the current releases. • We'll also cover some simple scenarios for using Docker to ease development tasks, even if you aren't ready for Docker in production. • We'll conclude with a review of what it means to be a "full stack developer" in a world of advanced JavaScript, mobile, voice, virtual reality, and more.
• http://openjdk.java.net/projects/jdk9/ • http://www.java9countdown.xyz/
• 2016/05/26 Feature Complete • 2016/08/11 All Tests Run • 2016/09/01 Rampdown Start • 2016/10/20 Zero Bug Bounce • 2016/12/01 Rampdown Phase 2 • 2017/01/26 Final Release Candidate • 2017/03/23 General Availability
258: HarfBuzz Font-Layout Engine 259: Stack-Walking API 260: Encapsulate Most Internal APIs 261: Module System 262: TIFF Image I/O 228: Add More Diagnostic Commands 102: Process API Updates 263: HiDPI Graphics on Windows and Linux 229: Create PKCS12 Keystores by Default 110: HTTP 2 Client 264: Platform Logging API and Service 231: Remove Launch-Time JRE Version Selection 143: Improve Contended Locking 232: Improve Secure Application Performance 265: Marlin Graphics Renderer 158: Unified JVM Logging 233: Generate Run-Time Compiler Tests Automatically 266: More Concurrency Updates 165: Compiler Control 235: Test Class-File Attributes Generated by javac 267: Unicode 8.0 193: Variable Handles 236: Parser API for Nashorn 268: XML Catalogs 197: Segmented Code Cache 237: Linux/AArch64 Port 269: Convenience Factory Methods for Collections 199: Smart Java Compilation, Phase Two 238: Multi-Release JAR Files 270: Reserved Stack Areas for Critical Sections 200: The Modular JDK 240: Remove the JVM TI hprof Agent 271: Unified GC Logging 201: Modular Source Code 241: Remove the jhat Tool 211: Elide Deprecation Warnings on Import 272: Platform-Specific Desktop Features 243: Java-Level JVM Compiler Interface Statements 273: DRBG-Based SecureRandom Implementations 244: TLS Application-Layer Protocol Negotiation 212: Resolve Lint and Doclint Warnings 274: Enhanced Method Handles Extension 213: Milling Project Coin 245: Validate JVM Command-Line Flag Arguments 275: Modular Java Application Packaging 214: Remove GC Combinations Deprecated in 246: Leverage CPU Instructions for GHASH and RSA 276: Dynamic Linking of Language-Defined Object Models JDK 8 247: Compile for Older Platform Versions 277: Enhanced Deprecation 215: Tiered Attribution for javac 248: Make G1 the Default Garbage Collector 278: Additional Tests for Humongous Objects in G1 216: Process Import Statements Correctly 249: OCSP Stapling for TLS 279: Improve Test-Failure Troubleshooting 217: Annotations Pipeline 2.0 250: Store Interned Strings in CDS Archives 280: Indify String Concatenation 219: Datagram Transport Layer Security (DTLS) 251: Multi-Resolution Images 220: Modular Run-Time Images 281: HotSpot C++ Unit-Test Framework 252: Use CLDR Locale Data by Default 221: Simplified Doclet API 282: jlink: The Java Linker 253: Prepare JavaFX UI Controls & CSS APIs for 222: jshell: The Java Shell (Read-Eval-Print Modularization 283: Enable GTK 3 on Linux Loop) 254: Compact Strings 284: New HotSpot Build System 223: New Version-String Scheme 255: Merge Selected Xerces 2.11.0 Updates into JAXP 285: Spin-Wait Hints 224: HTML5 Javadoc 256: BeanInfo Annotations 287: SHA-3 Hash Algorithms 225: Javadoc Search 257: Update JavaFX/Media to Newer Version of 289: Deprecate the Applet API 226: UTF-8 Property Files Gstreamer 227: Unicode 7.0
• 240:Remove the JVM TI hprof Agent • 241:Remove the jhat Tool • See CIS Java recording • 289:Deprecate the Applet API • 214:Remove GC Combinations Deprecated in JDK 8 • 231:Remove Launch-Time JRE Version Selection
• 102: Process API Updates • 110: HTTP 2 Client • 143: Improve Contended Locking • 216: Process Import Statements Correctly • 226: UTF-8 Property Files • 262: TIFF Image I/O • 263: HiDPI Graphics on Windows and Linux • 251: Multi-Resolution Images • 245: Validate JVM Command-Line Flag Arguments • 256: BeanInfo Annotations • From javadoc-> real annotations • 264: Platform Logging API and Service • 274: Enhanced Method Handles • Improved invoke
• 255: Merge Selected Xerces 2.11.0 Updates into JAXP • 268: XML Catalogs
• 223: New Version-String Scheme • JDK 7 Update 55, or JDK 7 Update 60? • $MAJOR.$MINOR.$SECURITY • 227: Unicode 7.0 • 267: Unicode 8.0 • 272: Platform-Specific Desktop Features • Mac OS X, Windows, Linux • Lots of cool desktop integration stuff • Forced by modules…
• 253: Prepare JavaFX UI Controls & CSS APIs for Modularization • Modules! • 257: Update JavaFX/Media to Newer Version of Gstreamer
• 158: Unified JVM Logging • 250: Store Interned Strings in CDS Archives • 212: Resolve Lint and Doclint Warnings • 252: Use CLDR Locale Data by Default • Default to CLDR Unicode locale data • 283: Enable GTK 3 on Linux • 258: HarfBuzz Font-Layout Engine • 284: New HotSpot Build System • 265: Marlin Graphics Renderer • 254: Compact Strings • 270: Reserved Stack Areas for Critical Sections • 278: Additional Tests for Humongous Objects in G1 • 271: Unified GC Logging • 197: Segmented Code Cache • 276: Dynamic Linking of Language-Defined Object • 228: Add More Diagnostic Commands Models • 165: Compiler Control • INVOKEDYNAMIC changes • 233: Generate Run-Time Compiler Tests Automatically • 279: Improve Test-Failure Troubleshooting • 235: Test Class-File Attributes Generated by javac • 280: Indify String Concatenation • 248: Make G1 the Default Garbage Collector • 281: HotSpot C++ Unit-Test Framework • https://blogs.oracle.com/java/entry/garbage_collector • 285: Spin-Wait Hints
• 236: Parser API for Nashorn • Get access to AST
• 193: Variable Handles • Replace atomic/Unsafe • 266: More Concurrency Updates • In JVM Reactive pub/sub • CompletableFutureimprovements
• 219: Datagram Transport Layer Security (DTLS) • 229: Create PKCS12 Keystores by Default • 232: Improve Secure Application Performance • Less of a hit when running w/Security Manager • 244: TLS Application-Layer Protocol Negotiation Extension • 246: Leverage CPU Instructions for GHASH and RSA • 249: OCSP Stapling for TLS • 273: DRBG-Based SecureRandom Implementations • 287: SHA-3 Hash Algorithms
• 199: Smart Java Compilation, Phase Two • Incremental builds, javac wrapper - sjavac • JEP 211: Elide Deprecation Warnings on Import Statements • Elide means “omit” • 215: Tiered Attribution for javac • New method type-checking strategy in javac, speed up attribution of poly expression in arg position • 217: Annotations Pipeline 2.0 • Function<String, String> fss= (@Anno @Anno String s) -> s; • 247: Compile for Older Platform Versions • -release N is equivalent to -source N -target N -bootclasspath <bootclasspath-from-N>. • 259: Stack-Walking API • Runtime stack walk • 277: Enhanced Deprecation • Revamp deprecation annotation • Provide tools to strengthen API life cycle - jdeprfind
• 213: Milling Project Coin • Allow @SafeVargs on private instance methods. • Effectively-final variables as resources in try-with- resources • Allow diamond with anonymous classes if argument type of inferred type is denotable • Complete removal, begun in Java SE 8, of underscore from set of legal identifier names • 269: Convenience Factory Methods for Collections • Set<String> set = Set.of("a", "b", "c");
• 221: Simplified Doclet API • 224: HTML5 Javadoc • 225: Javadoc Search • Local index
• 200: The Modular JDK • https://blogs.oracle.com/java/entry/module_system_in_jdk_9 • https://blogs.oracle.com/java/entry/the_state_of_the_module1 • 201: Modular Source Code • 220: Modular Run-Time Images • 222: jshell: The Java Shell (Read-Eval-Print Loop) • 237: Linux/AArch64 Port • 238: Multi-Release JAR Files • 260: Encapsulate Most Internal APIs • 261: Module System • 275: Modular Java Application Packaging • 282: jlink: The Java Linker • Tool to build JEP 220 Images
• Most simple way to think of… • Add declaration to JAR defining exposed API • No more public = exposed to everything • JDK 9 ~69 modules • java.base= 5575 classes • java.desktop= 5835 classes • java.corba = 1830 classes
module com.foo.bar { } module com.foo.bar { requires org.baz.qux; }
module com.foo.bar { requires org.baz.qux; exports com.foo.bar.alpha; exports com.foo.bar.beta; }
META-INF/ META-INF/MANIFEST.MF module-info.class com/foo/bar/alpha/AlphaFactory.class com/foo/bar/alpha/Alpha.class
Recommend
More recommend