Apache StreamPark (incubating)
Copyright 2022-2023 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

-----------------------------------------------------------------------
This product contains code from the Apache Maven Wrapper Project:

Apache Maven Wrapper
Copyright 2013-2022 The Apache Software Foundation

The original idea and initial implementation of the maven-wrapper module is derived
from the Gradle Wrapper which was written originally by Hans Dockter and Adam Murdoch.
Copyright 2007 the original author or authors.
