project system apis and maven project type a ... - netbeans · project system overview •...

29
Project system APIs and Maven Project Type A case study on modular design

Upload: others

Post on 23-Apr-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Project system APIs and Maven Project Type

A case study on modular design

Page 2: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Agenda

● Project system APIs design● Maven project type● Platform application built by Maven

Page 3: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Project system overview

• Abstraction over a set of resources• Extensible• Constraints> Based on folders, 1 project per folder> Files and folders belong always to 1

project

Page 4: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Project system overview

Page 5: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Base APIs

• Project > Management of projects

• Project UI> Display projects in UI

• Queries> Basic queries that delegate to projects

Page 6: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Project API

• ProjectManager maintains the list of projects known to the system.• Project is the base project

abstraction.> getProjectDirectory()> getLookup()

• FileOwnerQuery finds project that owns files and folders

Page 7: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Project SPI

• ProjectFactory identifies and creates Project instances> Implementations registered as global

services• FileOwnerQueryImplementation

defines strategy to find the owning project.• ... and various services to be

provided in project's getLookup()

Page 8: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Project UI API

• OpenProjects maintains a list of projects opened and displayed in the UI.> open(Project[])> close(Project[])> setMainProject(Project)> getMainProject()

Page 9: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Project UI SPI

• CustomizerProvider allows to create a dialog to customize the project.• LogicalViewProvider creates logical

view of project's content• Defining file templates for project> RecommendedTemplates> PrivilegedTemplates

Page 10: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Queries API

• FileBuiltQuery tells if a particular file was built or not.• FileEncodingQuery returns the

encoding for files.• VisibilityQuery knows if file shall be

visible in UI.• SharabilityQuery checks if the file or

folder shall be shared.

Page 11: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Domain specific APIs

● Java ClassPath● J2EE deployment● Debugger, Profiler● Web, EJB, EAR specific contracts● WebServices● Module development

Page 12: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Ant based projects

● Additional APIs to simplify creation of new Ant based project types.

● Support classes to ease development● AntProjectHelper

● Allow extending project from 3rd party modules● AntBuildExtender● ProjectClassPathModifier

Page 13: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Projects for non IDE use

● Viable option if domain model and UI workflow similar to IDE.

● Create own project type

Page 14: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Agenda

● Project system APIs design● Maven project type● Platform application built by Maven

Page 15: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Maven support overview

Page 16: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Bridge modules

● For functionality outside the “core business”

● Increased integration● Scales with the IDE● Gets downloaded and enabled based

on availability of bridging modules

Page 17: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Base Support

● Implements Project and basic queries● Uses spi support classes to make

project extensible● project's lookup● Nodes in logical view● Panels in project customizer

● Defines own extension points

Page 18: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

J2EE Support

● Adds J2EE domain specific SPI implementations into project lookup● only if applicable (war, ear, ejb)● corresponding file templates enabled● Run/Debug project action maps to J2EE

deployment● Run configuration panel added

Page 19: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Example: ActionProvider

● Found in project's lookup● LookupProvider for additional sources

of lookup, registered in layer filesystem.

● LookupMerger<ActionProvider> to define strategy to merge the implementations

Page 20: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Spring framework

● Project agnostic● Registers itself in projects' lookup

when Spring on classpath.● Configuration panel in customizer.

● CompositeCategoryProvider in layers● AuxiliaryConfiguration from project for

storage

Page 21: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Agenda

● Project system APIs design● Maven project type● Platform application built by

Maven

Page 22: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Apache Maven

● Project management system● Build driven by plugins● Dependencies in repositories

Page 23: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Module Development

● NetBeans modules handled by nbm-maven-plugin

● Allows building modules, creating NBM files

● Generate update site content● Application branding

Page 24: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Dependency management

● Transitive vs. direct● Modules vs. libraries● Remote repository at

deadlock.netbeans.org

Page 25: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Project templates

● Single NetBeans module● Suite setup for platform based

application

Page 26: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

IDE Support

● Most File templates available● Layers browsing● Public packages marked● Javadoc, source available in remote

repository

Page 27: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

What's missing?

● Final application packaging● Installer● MacOSX Application bundle● JNLP

● Project customization panels

Page 28: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Demo

● Maven based NetBeans platform development

Page 29: Project system APIs and Maven Project Type A ... - NetBeans · Project system overview • Abstraction over a set of resources • Extensible • Constraints > Based on folders, 1

Questions & Answers