Configurate

A simple configuration library for Java applications providing a node structure, a variety of formats, and tools for transformation

APACHE-2.0 License

Stars
349
Committers
28

Bot releases are visible (Hide)

Configurate - Configurate v4.1.2 Latest Release

Published by zml2008 about 3 years ago

  • core: Fix conversion of zero-value doubles to floats (#206)
  • core: Optimize TypeSerializerCollection.get based on end-user profiling
  • core: Fail fast when values of an incorrect type are set (#210)
Configurate - Configurate v3.7.3

Published by zml2008 about 3 years ago

  • Add Automatic-Module-Name manifest attribute to all Configurate components. This allows the 3.x series to be used in a modular environment.

Note: The module names were selected to align with the Configurate 4 artifact (and module) names. See the 4.0.0 release notes for information on the module renames that happened for that release.

Configurate - Configurate v4.1.1

Published by zml2008 over 3 years ago

  • Hotfix: Restore ability to write to final fields with the object mapper (#200)
Configurate - Configurate v4.1.0

Published by zml2008 over 3 years ago

This is a minor feature release to the Configurate v4 series that addresses a variety of bugfixes, small API additions, and Javadoc tweaks that have built up in the months since the 4.0.0 release.

Thanks to forresthopkinsa, jpenilla, and ItsTehBrian for their contributions to this release.

Added

  • core: NodePath.plus added to combine paths
  • core: AbstractListChildSerializer is now part of Configurate's public API
  • core: Added methods on ConfigurationLoader to load/save from strings
  • core: Temporary files for writing are now prepended with a . so they appear hidden in file viewers
  • core: Multi-release jar functionality is now used to take advantage of some collections and reflection API only available in newer Java versions
  • core: Added analysis annotations to indicate contracts in ConfigurationOptions and AbstractConfigurationLoader
  • core: Added ConfigurationNode.require methods for cases where a return value is known to be non-null, to avoid nullabilty warnings in IDEs
  • core: Added flags field to the @Matches constrant annotation to pass through Pattern flags
  • gson: Added serializers for JsonElement and its subtypes (accessible via GsonConfigurationLoader.gsonSerializers())
  • kotlin: Add supplier-defaulted get() extensions to ConfigurationNode

Fixed

  • core: Retry closing in AtomicFiles, to attempt better handling of Windows file locking
  • core: Handling of integer keys in the map serializer (#184)
  • core: Improve error messages when trying to get the object mapper to construct an object instance that it is unable to.
  • core: Fix handling of absent primitive fields in the record object mapper
  • core: Fix erasing target files when attempting to save a clearly invalid node (#189)
  • core: Sets of enums are now deserialized as EnumSets rather than HashSets
  • core: Add missing primitive types to Types.box/unbox
  • core: Separate the concepts of a null value and being virtual, to correct handling of null-valued non-virtual nodes (#187)
  • core: Correctly handle configuration files stored within symlinked directories
  • core: Fixed improper floating-point precision testing (#198)
  • hocon: Ensure leading spaces in comments are stripped
  • kotlin: Correct the non-defaulted get method to use the appropriate Java overload of get (#185)

Deprecated

  • kotlin: The NodePath.plus extension function has been deprecated since it is replaced by the plus method in NodePath itself.
Configurate - Configurate v4.0.0

Published by zml2008 almost 4 years ago

Welcome to a new major release of Configurate! We've taken the time to review a lot of longstanding pain points, so there are a variety of breaking changes in this release. Some of the behaviour changes can be subtle, so please read the changelog carefully.

To ease upgrading for IntelliJ users, a migration XML file has been attached to this release. This can be imported as IDE settings, or placed in your $INTELLIJ_HOME/migration folder (in %APPDATA%/Roaming/JetBrains on Windows).

New features

  • Added TypeSerializers for Path and File
  • Added new registerExact method to TypeSerializerCollection.Builder to register serializers for only a single type and not its subtypes.
  • Added Java 14+ record support and many other features to the object mapper (see below for more details).
  • Added new submodules to integrate with Mojang's DataFixerUpper library (versions 2-4), with a DynamicOps implementation, DataFix-using transformations, and conversions between Codecs and TypeSerializers.
  • Make more extensive use of a unified NodePath across the whole API, for operations like resolving nodes and specifying transformation paths.
  • Redesigned the exception structure of the project, so all configuration operations throw exceptions that extend from ConfigurateException, which provide more machine-readable metadata. ConfigurateException extends IOException, so existing error handling may not break.
  • Add new NodeFactory interface to provide a common view for creating configuration nodes.
  • Limited support for reading YAML files indented with tabs.
  • Added a new "representation hints" system for attaching arbitrary metadata to nodes.
  • Added support for "implicit initialization" in TypeSerializers. This will, for collection types, resolve null node values as empty collections. Implicit initialization is enabled by default.

Breaking changes

  • Moved from ninja.leaping to org.spongepowered package.
  • Moved type serializers from objectmapping.serialize to serialize package.
  • Made node implementation classes package-private, and moved the attributed and commented node subtypes out of their own packages.
  • Dropped the get and set prefixes from method names across the API.
  • No longer depends on the Guava library. This has resulted in a lot of code that formerly used the Guava TypeToken moving to use either java.lang.reflect.Type or the GeAnTyRef TypeToken.
  • Renamed configurate-json implementation to configurate-jackson.
  • Renamed configurate-ext-kotlin to configurate-extra-kotlin.
  • Moved Guice support out of core into configurate-extra-guice.
  • When loading a configuration file, empty lists and maps are represented as such in nodes in all loaders. In the past, some loaders have provided null values instead.
  • YamlConfigurationLoader now returns CommentedConfigurationNode instances, in preparation for full comment support coming in a future release.
  • In the YAML and HOCON loaders, the underlying libraries used are now to be treated as an implementation detail. All API that directly referenced them has been replaced with equivalents that use Configurate types.
  • The default ConfigurationOptions values for shouldCopyDefaults has been set to true.
  • The deprecated node walker has been removed.

Object Mapper

The object mapper has changed quite a bit, so most users will need to change their use in some way.

  • Refactored TypeSerializerCollection to be immutable. A new child collection must be created to add custom type serializers.
  • Redesigned the object mapper to be more extensible. Rather than subclassing the object mapper as some people did before, there are now defined extension points where additional annotations and behaviours can be registered. See the methods in ObjectMapper.Factory.Builder for a more thorough overview.
  • Added support for Java 14+ records and, in combination with the configurate-extra-kotlin module, Kotlin data classes.
    The @Setting annotation is now optional. By default, all non-transient fields will be included in objects, and names will be converted to the kebab-case naming scheme. Both of these can be customized with a custom ObjectMapper.Factory
  • The shouldCopyDefaults option is now respected for mapped object fields.
  • The ObjectMapperFactory field has been removed from ConfigurationOptions. Instead, the object mapper can be registered like any other type serializer, using the TypeSerializerCollection.Builder#registerAnnotatedObjects method.

Bugs fixed

  • Create the parent directory of files being written, to remove a common 'gotcha'.
  • Try to group together events in the watch service listener, to reduce duplicate reloads.
  • Fix merging values into a virtual node not correctly attaching the node (#181)
Configurate - Configurate v3.7.2

Published by zml2008 almost 4 years ago

This is a bugfix release for the Configurate 3.7 series, coming with a few minor fixes:

  • Work around null values appearing when visiting configuration nodes
  • Be more defensive when potentially returning null lists

Compiled jars are available from Maven Central

Configurate - Configurate v3.7.1

Published by zml2008 about 4 years ago

This is a bugfix release for 3.7, coming with a few minor tweaks:

  • Fix saving JSON-format configurations starting from a non-root node (#163)
  • Correctly handle removing a never-attached list element from its parent node
  • Follow symbolic links when saving using AtomicFiles (default for most configuration loaders).
Configurate - Configurate v3.7

Published by zml2008 over 4 years ago

After a long wait, v3.7 is finally here. The biggest feature in this release is the ConfigurationReference system and associated ability to automatically reload configurations, but it also contains a variety of bug fixes and deprecates some methods in preparation for 4.0. There is now also a collection of idiomatic Configurate examples included in the repository, under the configurate-examples folder that can be referenced for inspiration on how to effectively use the library.

Additionally, up-to-data Javadocs are now published at https://configurate.aoeu.xyz! It's been a while since javadocs were last updated, so the new revision brings a lot of improvements.

Thanks to @kashike for contributions to this release

Deprecations

  • All set* methods in ConfigurationOptions have been deprecated, to be replaced with equivalent methods starting with with___.
  • Accessors in TypeSerializers have been moved to TypeSerializerCollection, and register____ methods have been renamed to register
  • Modifying the global TypeSerializerCollection is deprecated behaviour. Any configurations that need custom type serializers should create their own child of the default collection and add to that.
  • ConfigurationNode.getAppendedChild() should be replaced with ConfigurationNode.appendListNode()
  • hasListChildren() and hasMapChildren() should be replaced with isList() and isMap() to more effectively express that they reflect the type of the node, not whether it has contents.
  • As root node creation methods have been moved to the node interface, usage of the Simple* nod implementation classes is deprecated. They will be made package-private in 4.0.
  • ConfigurationNodeWalker has been deprecated, to be replaced with the new more structured ConfigurationVisitor API.
  • ValueType will be removed in 4.0. Its functionality is already covered by existing methods.

Added

  • New configuration and value reference system for automatically reloading configurations

  • New module configurate-ext-kotlin with some basic utilities for using Configurate in Kotlin

  • New module configurate-tool is a CLI tool to inspect configurations loaded through Configurate loaders`

  • New module: configurate-bom can be imported to centralize Configurate version declaration across a project

  • loader: Automatically create parent directories when trying to write a configuration

  • objectmapping: New TypeSerializers for arrays, chars, Sets, and ConfigurationNodes

  • core: New method isEmpty() to determine if a node has contents, or exists but with an empty value.

  • core: New act method on nodes that takes a Consumer<ConfigurationNode> to perform an action on the node

  • core: New setCommentIfAbsent method on CommentedConfigurationNodes

  • core: Abstract TypeSerializer implementations added for Scalars and objects read from list nodes

  • loader: Added functional helper methods for changing options and options' TypeSerializerCollection when building a loader

  • core: New getNode(Iterable<?>) method will work the same as getNode(Object...), but allow looking up nodes without having to convert existing collections to arrays.

  • core: AttributedConfigurationNode now extends CommentedConfigurationNode

  • xml: Load and save comments

  • all: Configurate jars now include their license for easier compliance

Fixed

  • objectmapping: Preserve comments on map keys when round-tripping data through the type serializer for Maps
  • gson: Correctly ignore null values in JSON files loaded from the Gson configuration loader
  • objectmapping: Resolve type parameters in fields. For example, in a class class MyConfig<T> { @Setting private List<T> items;, the list will be appropriately resolved as long as new object mapper factory methods that accept TypeTokens are used.
  • objectmapping: Correctly reject interface types from being passed to ObjectMappers rather than throwing an exception
  • objectmapping: Preserve configuration options when deserializing map keys
  • hocon: Read empty lists as empty lists, to match behaviour when reading maps.
  • loader: Don't read whole line to determine if file contains header. Resolves issues exceeding the mark limit on extremely long first lines, or files without line breaks (minified JSON, for example)
  • objectmapping: The TypeSerializer for subclasses of Number will now attempt to coerce values to types native to the destination configuration when serializing.
  • core: AttributedConfigurationNodes will now be attached as soon as attributes are set on them.
  • core: The root configuration node's path is the empty array, and getPath() has been corrected to return this.

Releases are available on the Sponge maven repo, and all configurate components are contained within the configurate-tool distribution attached to this release.

Configurate - 3.6.1

Published by gabizou over 5 years ago

Bug fixes following the 3.6 release:

This bugfix release does not change any previous behaviors of serialization/deserialization, except now merging ConfigurationNodes will no longer null values from the other node being merged into the parent if the parent has a null value in said node.

Configurate - Configurate v3.5

Published by kashike over 6 years ago

  • Revert compatibility break with NodePath and ConfigurationTransformation
Configurate - Configurate v3.4

Published by kashike over 6 years ago

  • Fix this bug: Lists in config get set to null
  • Expose customized default render and parse options
  • Fix reading of multi-line HOCON comments
  • Select from available type serializers in the order they were added
  • change group to org.spongepowered
  • Implement XML configuration loader
  • Invalidate cached type matches when a new serializer is added
  • Add ConfigurationNode#copy
  • Only include the key + value in ConfigurationNode#toString
  • Fix CommentedConfigurationNode#equals never returning true
  • Implement NodeWalker utility for traversing configuration structures
  • Fix compatibility with older versions of guava

Migration Note:

As the gradle group has changed from ninja.leaping to org.spongepowered you will need to update your dependencies in your build scripts.

E.g. For Gradle:

    compile 'ninja.leaping.configurate:configurate-hocon:3.3'
    compile 'ninja.leaping.configurate:configurate-gson:3.3'
    compile 'ninja.leaping.configurate:configurate-yaml:3.3'

becomes

    compile 'org.spongepowered:configurate-hocon:3.4'
    compile 'org.spongepowered:configurate-gson:3.4'
    compile 'org.spongepowered:configurate-yaml:3.4'
    compile 'org.spongepowered:configurate-xml:3.4'

No other changes should be necessary.

Configurate - Configurate v3.3

Published by zml2008 over 7 years ago

  • Update Maven and various Maven plugins
  • Update snakeyaml to 1.18 from 1.16, jackson to 2.8.8 from 2.6.3, typesafe hocon config to 1.3.1 from 1.3.0, gson to 2.8.0 from 2.2.4, and optional guice dependency to 4.1 from 4.0 where used.
  • Move usage of removed Guava method, update Guava
  • Resolve some issues with atomic writes by using more fine-grained time when generating temp file names
  • Allow resolving enums that don't follow standard naming conventions. Lookup is case-insensitive and ignores underscores. If the enum has two fields that are equal except for case and underscores, an exact match will return the appropriate value, and any fuzzy matches will map to the first value in the enum that is applicable.

Downloads are available from Maven Central

Configurate - Configurate v3.2

Published by zml2008 about 8 years ago

  • Allow Gson module to save empty files
  • Resolve configuration variables for hocon
  • Fix various issues on Windows
  • Correct file permissions
  • Improve error message when unable to find an appropriate TypeSerializer or when using raw types
  • Allow stripping header from files entirely
Configurate - Configurate v3.1.1

Published by zml2008 almost 9 years ago

Distributed on Maven Central as usual.

  • Correctly use UTF-8 when loading from a URL
  • Make setValue(TypeToken, T) be a default method in ConfigurationNode
  • Correct TypeSerializer handling of empty maps and lists
Configurate - Configurate v1.2.1

Published by zml2008 over 9 years ago

  • core: Properly remove values removed from maps while reserializing data
  • gson: Downgrade gson dependency to 2.2.4 for expanded compatibility
  • hocon: Properly load empty maps and lists
Configurate - Configurate v1.1.1

Published by zml2008 over 9 years ago

  • core: fix jdk6 & windows compatibility
Configurate - Configurate v1.1

Published by zml2008 over 9 years ago

  • core: Fix jdk6 compatibility
  • core: Add equals, hashCode, and toString to node objects
  • json: Bump jackson dependency to 2.5.2
  • json: Make pretty printing more flexible with new methods on Builder
Configurate - Configurate v1.0.1

Published by zml2008 over 9 years ago

1.0.1

  • Handle objects with null fields being serialized
  • Handle concurrent removal of nodes while saving in HoconConfigurationLoader
  • Fix node path comparator to correctly handle paths with wildcards in a few cases

1.0

  • Bug fixes
  • Add merging of config values
  • Add getKey, getParent, and getPath
  • Add merged and versioned transformers
  • Refactor ObjectMapper to be fancier and work better
  • Add gson-backed JSON configuration loader
  • Implement header loading
  • Add support for atomic writing
  • Allow choosing between serveal map implementations for nodes with map children
  • Polishing
Configurate - Configurate v0.2

Published by zml2008 over 9 years ago

  • Implemented object mapper system
  • Added configuration migration support
  • Added configurability to loaders