diff --git a/.gitignore b/.gitignore index 7e0d854..210905c 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,7 @@ build/ dev.properties out/ target/ +gen/ +mdguides/ +mdinfo/ Thumbs.db diff --git a/THIRD_PARTY_LICENSES.txt b/THIRD_PARTY_LICENSES.txt index f7f9aa7..eff665e 100644 --- a/THIRD_PARTY_LICENSES.txt +++ b/THIRD_PARTY_LICENSES.txt @@ -10,10 +10,69 @@ The following software may be included in this product: ================================================================================ +slf4j-api + +Copyright (c) 2004-2023 QOS.ch +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +================================================================================ + slf4j-nop -#############License.txt for 4th party slf4j-api component###################### -Copyright (c) 2004-2022 QOS.ch +Top Level Component Name: slf4j-nop +Top Level Component License: MIT +Top Level Component Copyright Notice: +------------------------------ + +Copyright (c) 2004-2007 QOS.ch +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================================================== + +4P Component Name: slf4j-api +4P Component License: MIT +4P Component Copyright Notice: +------------------------------ + +Copyright (c) 2004-2007 QOS.ch All rights reserved. Permission is hereby granted, free of charge, to any person obtaining @@ -37,7 +96,21 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================================ -Picocli Shell JLine3 +picocli + +/* +Copyright 2017 Remko Popma +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + Apache License Version 2.0, January 2004 @@ -241,745 +314,233 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -========================= -picocli Apache 2.0 license -========================= -JLine BSD License -Copyright (c) 2002-2018, the original author or authors. -All rights reserved. +================================================================================ -https://opensource.org/licenses/BSD-3-Clause +Jansi -Redistribution and use in source and binary forms, with or -without modification, are permitted provided that the following -conditions are met: +jansi (org.fusesource.jansi:jansi) +Copyright (C) 2009-2021 the original author(s). +-------------------------------------------- -Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ -Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with -the distribution. +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -Neither the name of JLine nor the names of its contributors -may be used to endorse or promote products derived from this -software without specific prior written permission. +1. Definitions. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. -================================================================================ +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. -Jakarta Annotations API +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. -Jakarta Annotations API (jakarta.annotation:jakarta.annotation-api) -Copyright (c) 2009, 2022 Oracle and/or its affiliates. All rights reserved. -Copyright (c) 2021 Eclipse Foundation. ------------------------------------------------------------------------ -# Notices for Jakarta Annotations +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. -This content is produced and maintained by the Jakarta Annotations project. +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. -* Project home: https://projects.eclipse.org/projects/ee4j.ca +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. -## Trademarks +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). -Jakarta Annotations is a trademark of the Eclipse Foundation. +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. -## Declared Project Licenses +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." -This program and the accompanying materials are made available under the terms -of the Eclipse Public License v. 2.0 which is available at -http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made -available under the following Secondary Licenses when the conditions for such -availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU -General Public License, version 2 with the GNU Classpath Exception which is -available at https://www.gnu.org/software/classpath/license.html. +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. -SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. -## Source Code +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. -The project maintains the following source code repositories: +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: -* https://github.com/eclipse-ee4j/common-annotations-api +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and -## Cryptography +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and -Content may contain encryption software. The country in which you are currently -may have restrictions on the import, possession, and use, and/or re-export to -another country, of encryption software. BEFORE using any encryption software, -please check the country's laws, regulations and policies concerning the import, -possession, or use, and re-export of encryption software, to see if this is -permitted. ------------------------------------------------------------------------ -Eclipse Public License - v 2.0 +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE -PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION -OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. -1. DEFINITIONS +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. -"Contribution" means: +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. -a) in the case of the initial Contributor, the initial content -Distributed under this Agreement, and +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. -b) in the case of each subsequent Contributor: -i) changes to the Program, and -ii) additions to the Program; -where such changes and/or additions to the Program originate from -and are Distributed by that particular Contributor. A Contribution -"originates" from a Contributor if it was added to the Program by -such Contributor itself or anyone acting on such Contributor's behalf. -Contributions do not include changes or additions to the Program that -are not Modified Works. - -"Contributor" means any person or entity that Distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which -are necessarily infringed by the use or sale of its Contribution alone -or when combined with the Program. - -"Program" means the Contributions Distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement -or any Secondary License (as applicable), including Contributors. - -"Derivative Works" shall mean any work, whether in Source Code or other -form, that is based on (or derived from) the Program and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. - -"Modified Works" shall mean any work in Source Code or other form that -results from an addition to, deletion from, or modification of the -contents of the Program, including, for purposes of clarity any new file -in Source Code form that contains any contents of the Program. Modified -Works shall not include works that contain only declarations, -interfaces, types, classes, structures, or files of the Program solely -in each case in order to link to, bind by name, or subclass the Program -or Modified Works thereof. - -"Distribute" means the acts of a) distributing or b) making available -in any manner that enables the transfer of a copy. - -"Source Code" means the form of a Program preferred for making -modifications, including but not limited to software source code, -documentation source, and configuration files. - -"Secondary License" means either the GNU General Public License, -Version 2.0, or any later versions of that license, including any -exceptions or additional permissions as identified by the initial -Contributor. - -2. GRANT OF RIGHTS - -a) Subject to the terms of this Agreement, each Contributor hereby -grants Recipient a non-exclusive, worldwide, royalty-free copyright -license to reproduce, prepare Derivative Works of, publicly display, -publicly perform, Distribute and sublicense the Contribution of such -Contributor, if any, and such Derivative Works. - -b) Subject to the terms of this Agreement, each Contributor hereby -grants Recipient a non-exclusive, worldwide, royalty-free patent -license under Licensed Patents to make, use, sell, offer to sell, -import and otherwise transfer the Contribution of such Contributor, -if any, in Source Code or other form. This patent license shall -apply to the combination of the Contribution and the Program if, at -the time the Contribution is added by the Contributor, such addition -of the Contribution causes such combination to be covered by the -Licensed Patents. The patent license shall not apply to any other -combinations which include the Contribution. No hardware per se is -licensed hereunder. - -c) Recipient understands that although each Contributor grants the -licenses to its Contributions set forth herein, no assurances are -provided by any Contributor that the Program does not infringe the -patent or other intellectual property rights of any other entity. -Each Contributor disclaims any liability to Recipient for claims -brought by any other entity based on infringement of intellectual -property rights or otherwise. As a condition to exercising the -rights and licenses granted hereunder, each Recipient hereby -assumes sole responsibility to secure any other intellectual -property rights needed, if any. For example, if a third party -patent license is required to allow Recipient to Distribute the -Program, it is Recipient's responsibility to acquire that license -before distributing the Program. - -d) Each Contributor represents that to its knowledge it has -sufficient copyright rights in its Contribution, if any, to grant -the copyright license set forth in this Agreement. - -e) Notwithstanding the terms of any Secondary License, no -Contributor makes additional grants to any Recipient (other than -those set forth in this Agreement) as a result of such Recipient's -receipt of the Program under the terms of a Secondary License -(if permitted under the terms of Section 3). - -3. REQUIREMENTS - -3.1 If a Contributor Distributes the Program in any form, then: - -a) the Program must also be made available as Source Code, in -accordance with section 3.2, and the Contributor must accompany -the Program with a statement that the Source Code for the Program -is available under this Agreement, and informs Recipients how to -obtain it in a reasonable manner on or through a medium customarily -used for software exchange; and - -b) the Contributor may Distribute the Program under a license -different than this Agreement, provided that such license: -i) effectively disclaims on behalf of all other Contributors all -warranties and conditions, express and implied, including -warranties or conditions of title and non-infringement, and -implied warranties or conditions of merchantability and fitness -for a particular purpose; - -ii) effectively excludes on behalf of all other Contributors all -liability for damages, including direct, indirect, special, -incidental and consequential damages, such as lost profits; - -iii) does not attempt to limit or alter the recipients' rights -in the Source Code under section 3.2; and - -iv) requires any subsequent distribution of the Program by any -party to be under a license that satisfies the requirements -of this section 3. - -3.2 When the Program is Distributed as Source Code: - -a) it must be made available under this Agreement, or if the -Program (i) is combined with other material in a separate file or -files made available under a Secondary License, and (ii) the initial -Contributor attached to the Source Code the notice described in -Exhibit A of this Agreement, then the Program may be made available -under the terms of such Secondary Licenses, and - -b) a copy of this Agreement must be included with each copy of -the Program. - -3.3 Contributors may not remove or alter any copyright, patent, -trademark, attribution notices, disclaimers of warranty, or limitations -of liability ("notices") contained within the Program from any copy of -the Program which they Distribute, provided that Contributors may add -their own appropriate notices. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities -with respect to end users, business partners and the like. While this -license is intended to facilitate the commercial use of the Program, -the Contributor who includes the Program in a commercial product -offering should do so in a manner which does not create potential -liability for other Contributors. Therefore, if a Contributor includes -the Program in a commercial product offering, such Contributor -("Commercial Contributor") hereby agrees to defend and indemnify every -other Contributor ("Indemnified Contributor") against any losses, -damages and costs (collectively "Losses") arising from claims, lawsuits -and other legal actions brought by a third party against the Indemnified -Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program -in a commercial product offering. The obligations in this section do not -apply to any claims or Losses relating to any actual or alleged -intellectual property infringement. In order to qualify, an Indemnified -Contributor must: a) promptly notify the Commercial Contributor in -writing of such claim, and b) allow the Commercial Contributor to control, -and cooperate with the Commercial Contributor in, the defense and any -related settlement negotiations. The Indemnified Contributor may -participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial -product offering, Product X. That Contributor is then a Commercial -Contributor. If that Commercial Contributor then makes performance -claims, or offers warranties related to Product X, those performance -claims and warranties are such Commercial Contributor's responsibility -alone. Under this section, the Commercial Contributor would have to -defend claims against the other Contributors related to those performance -claims and warranties, and if a court requires any other Contributor to -pay any damages as a result, the Commercial Contributor must pay -those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" -BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR -IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF -TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR -PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all -risks associated with its exercise of rights under this Agreement, -including but not limited to the risks and costs of program errors, -compliance with applicable laws, damage to or loss of data, programs -or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT -PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS -SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST -PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of -the remainder of the terms of this Agreement, and without further -action by the parties hereto, such provision shall be reformed to the -minimum extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity -(including a cross-claim or counterclaim in a lawsuit) alleging that the -Program itself (excluding combinations of the Program with other software -or hardware) infringes such Recipient's patent(s), then such Recipient's -rights granted under Section 2(b) shall terminate as of the date such -litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it -fails to comply with any of the material terms or conditions of this -Agreement and does not cure such failure in a reasonable period of -time after becoming aware of such noncompliance. If all Recipient's -rights under this Agreement terminate, Recipient agrees to cease use -and distribution of the Program as soon as reasonably practicable. -However, Recipient's obligations under this Agreement and any licenses -granted by Recipient relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, -but in order to avoid inconsistency the Agreement is copyrighted and -may only be modified in the following manner. The Agreement Steward -reserves the right to publish new versions (including revisions) of -this Agreement from time to time. No one other than the Agreement -Steward has the right to modify this Agreement. The Eclipse Foundation -is the initial Agreement Steward. The Eclipse Foundation may assign the -responsibility to serve as the Agreement Steward to a suitable separate -entity. Each new version of the Agreement will be given a distinguishing -version number. The Program (including Contributions) may always be -Distributed subject to the version of the Agreement under which it was -received. In addition, after a new version of the Agreement is published, -Contributor may elect to Distribute the Program (including its -Contributions) under the new version. - -Except as expressly stated in Sections 2(a) and 2(b) above, Recipient -receives no rights or licenses to the intellectual property of any -Contributor under this Agreement, whether expressly, by implication, -estoppel or otherwise. All rights in the Program not expressly granted -under this Agreement are reserved. Nothing in this Agreement is intended -to be enforceable by any entity that is not a Contributor or Recipient. -No third-party beneficiary rights are created under this Agreement. - -Exhibit A - Form of Secondary Licenses Notice - -"This Source Code may also be made available under the following -Secondary Licenses when the conditions for such availability set forth -in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), -version(s), and exceptions or additional permissions here}." - -Simply including a copy of this Agreement, including this Exhibit A -is not sufficient to license the Source Code under Secondary Licenses. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to -look for such a notice. - -You may add additional accurate notices of copyright ownership. - ------------------------------------------------------------------------ - -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - -We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - -Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and -modification follow. - -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - -a) You must cause the modified files to carry prominent notices -stating that you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in -whole or in part contains or is derived from the Program or any -part thereof, to be licensed as a whole at no charge to all third -parties under the terms of this License. - -c) If the modified program normally reads commands interactively -when run, you must cause it, when started running for such -interactive use in the most ordinary way, to print or display an -announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this -License. (Exception: if the Program itself is interactive but -does not normally print such an announcement, your work based on -the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of Sections -1 and 2 above on a medium customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three -years, to give any third party, for a charge no more than your -cost of physically performing source distribution, a complete -machine-readable copy of the corresponding source code, to be -distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer -to distribute corresponding source code. (This alternative is -allowed only for noncommercial distribution and only if you -received the program in object code or executable form with such -an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - -5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. -NO WARRANTY +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - -Copyright (C) - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. -This is free software, and you are welcome to redistribute it -under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in the program -`Gnomovision' (which makes passes at compilers) written by James Hacker. - -, 1 April 1989 -Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. - -CLASSPATH EXCEPTION -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License version 2 cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from or -based on this library. If you modify this library, you may extend this -exception to your version of the library, but you are not obligated to -do so. If you do not wish to do so, delete this exception statement -from your version. +APPENDIX: How to apply the Apache License to your work. -================================================================================ +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. -picocli +Copyright [yyyy] [name of copyright owner] -/* -Copyright 2017 Remko Popma Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -*/ +---------------------------------------------- +Fourth Party Dependencies +---------------------------------------------- +HawtJNI +Copyright (C) 2009-2011 FuseSource Corp. +Copyright (c) 2004, 2008 IBM Corporation and others. +This product includes software developed by FuseSource Corp. +http://fusesource.com +This product includes software developed at Progress Software Corporation and/or +its subsidiaries or affiliates. +This product includes software developed by IBM Corporation and others. + +Apache License Version 2.0 + + +================================================================================ +Picocli Shell JLine3 Apache License Version 2.0, January 2004 @@ -1183,419 +744,90 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -== NOTICE file - -This project includes one or more files from OpenJDK, licensed under GPL v2 with -Classpath Exception. - -The GNU General Public License (GPL) - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public License is intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. This General Public License applies to -most of the Free Software Foundation's software and to any other program whose -authors commit to using it. (Some other Free Software Foundation software is -covered by the GNU Library General Public License instead.) You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for this service if you wish), -that you receive source code or can get it if you want it, that you can change -the software or use pieces of it in new free programs; and that you know you -can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny -you these rights or to ask you to surrender the rights. These restrictions -translate to certain responsibilities for you if you distribute copies of the -software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for -a fee, you must give the recipients all the rights that you have. You must -make sure that they, too, receive or can get the source code. And you must -show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) -offer you this license which gives you legal permission to copy, distribute -and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If the -software is modified by someone else and passed on, we want its recipients to -know that what they have is not the original, so that any problems introduced -by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program proprietary. -To prevent this, we have made it clear that any patent must be licensed for -everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification -follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the terms of -this General Public License. The "Program", below, refers to any such program -or work, and a "work based on the Program" means either the Program or any -derivative work under copyright law: that is to say, a work containing the -Program or a portion of it, either verbatim or with modifications and/or -translated into another language. (Hereinafter, translation is included -without limitation in the term "modification".) Each licensee is addressed as -"you". - -Activities other than copying, distribution and modification are not covered by -this License; they are outside its scope. The act of running the Program is -not restricted, and the output from the Program is covered only if its contents -constitute a work based on the Program (independent of having been made by -running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as -you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and give any other recipients of the -Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may -at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus -forming a work based on the Program, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all of -these conditions: - -a) You must cause the modified files to carry prominent notices stating -that you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in whole or -in part contains or is derived from the Program or any part thereof, to be -licensed as a whole at no charge to all third parties under the terms of -this License. - -c) If the modified program normally reads commands interactively when run, -you must cause it, when started running for such interactive use in the -most ordinary way, to print or display an announcement including an -appropriate copyright notice and a notice that there is no warranty (or -else, saying that you provide a warranty) and that users may redistribute -the program under these conditions, and telling the user how to view a copy -of this License. (Exception: if the Program itself is interactive but does -not normally print such an announcement, your work based on the Program is -not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Program, and can be reasonably -considered independent and separate works in themselves, then this License, and -its terms, do not apply to those sections when you distribute them as separate -works. But when you distribute the same sections as part of a whole which is a -work based on the Program, the distribution of the whole must be on the terms -of this License, whose permissions for other licensees extend to the entire -whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Program. - -In addition, mere aggregation of another work not based on the Program with the -Program (or with a work based on the Program) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - -3. You may copy and distribute the Program (or a work based on it, under -Section 2) in object code or executable form under the terms of Sections 1 and -2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source -code, which must be distributed under the terms of Sections 1 and 2 above -on a medium customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three years, to -give any third party, for a charge no more than your cost of physically -performing source distribution, a complete machine-readable copy of the -corresponding source code, to be distributed under the terms of Sections 1 -and 2 above on a medium customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer to -distribute corresponding source code. (This alternative is allowed only -for noncommercial distribution and only if you received the program in -object code or executable form with such an offer, in accord with -Subsection b above.) - -The source code for a work means the preferred form of the work for making -modifications to it. For an executable work, complete source code means all -the source code for all modules it contains, plus any associated interface -definition files, plus the scripts used to control compilation and installation -of the executable. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the source -code from the same place counts as distribution of the source code, even though -third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as -expressly provided under this License. Any attempt otherwise to copy, modify, -sublicense or distribute the Program is void, and will automatically terminate -your rights under this License. However, parties who have received copies, or -rights, from you under this License will not have their licenses terminated so -long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. -However, nothing else grants you permission to modify or distribute the Program -or its derivative works. These actions are prohibited by law if you do not -accept this License. Therefore, by modifying or distributing the Program (or -any work based on the Program), you indicate your acceptance of this License to -do so, and all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), -the recipient automatically receives a license from the original licensor to -copy, distribute or modify the Program subject to these terms and conditions. -You may not impose any further restrictions on the recipients' exercise of the -rights granted herein. You are not responsible for enforcing compliance by -third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), conditions -are imposed on you (whether by court order, agreement or otherwise) that -contradict the conditions of this License, they do not excuse you from the -conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Program at all. -For example, if a patent license would not permit royalty-free redistribution -of the Program by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system, which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Program under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the -General Public License from time to time. Such new versions will be similar in -spirit to the present version, but may differ in detail to address new problems -or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software Foundation. -If the Program does not specify a version number of this License, you may -choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs -whose distribution conditions are different, write to the author to ask for -permission. For software which is copyrighted by the Free Software Foundation, -write to the Free Software Foundation; we sometimes make exceptions for this. -Our decision will be guided by the two goals of preserving the free status of -all derivatives of our free software and of promoting the sharing and reuse of -software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE -PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR -INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA -BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER -OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible -use to the public, the best way to achieve this is to make it free software -which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach -them to the start of each source file to most effectively convey the exclusion -of warranty; and each file should have at least the "copyright" line and a -pointer to where the full notice is found. - -One line to give the program's name and a brief idea of what it does. - -Copyright (C) - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., 59 -Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it -starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author Gnomovision comes -with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free -software, and you are welcome to redistribute it under certain conditions; -type 'show c' for details. +========================= +picocli Apache 2.0 license +========================= +JLine BSD License +Copyright (c) 2002-2018, the original author or authors. +All rights reserved. -The hypothetical commands 'show w' and 'show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may be -called something other than 'show w' and 'show c'; they could even be -mouse-clicks or menu items--whatever suits your program. +https://opensource.org/licenses/BSD-3-Clause -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the program, if necessary. Here -is a sample; alter the names: +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the following +conditions are met: -Yoyodyne, Inc., hereby disclaims all copyright interest in the program -'Gnomovision' (which makes passes at compilers) written by James Hacker. +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. -signature of Ty Coon, 1 April 1989 +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with +the distribution. -Ty Coon, President of Vice +Neither the name of JLine nor the names of its contributors +may be used to endorse or promote products derived from this +software without specific prior written permission. -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General Public -License instead of this License. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +================================================================================ -"CLASSPATH" EXCEPTION TO THE GPL +jakarta.inject-api -Certain source files distributed by Oracle America and/or its affiliates are -subject to the following clarification and special exception to the GPL, but -only where Oracle has expressly included in the particular source file's header -the words "Oracle designates this particular file as subject to the "Classpath" -exception as provided by Oracle in the LICENSE file that accompanied this code." +Jakarta Dependency Injection API (@inject) (jakarta.inject:jakarta.inject-api) +Copyright(C) 2009 The JSR-330 Expert Group +Copyright 2019 Eclipse Foundation -Linking this library statically or dynamically with other modules is making -a combined work based on this library. Thus, the terms and conditions of -the GNU General Public License cover the whole combination. +############################################################# +# Notices for Eclipse Jakarta Dependency Injection -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent modules, -and to copy and distribute the resulting executable under terms of your -choice, provided that you also meet, for each linked independent module, -the terms and conditions of the license of that module. An independent -module is a module which is not derived from or based on this library. If -you modify this library, you may extend this exception to your version of -the library, but you are not obligated to do so. If you do not wish to do -so, delete this exception statement from your version. +This content is produced and maintained by the Eclipse Jakarta Dependency +Injection project. -================================================================================ +* Project home: https://projects.eclipse.org/projects/cdi.batch -slf4j-api +## Trademarks -Copyright (c) 2004-2022 QOS.ch -All rights reserved. +Jakarta Dependency Injection is a trademark of the Eclipse Foundation. -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: +## Copyright -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +All content is the property of the respective authors or their employers. For +more information regarding authorship of content, please consult the listed +source code repository logs. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +## Declared Project Licenses --------------------------------------------------- -4th Party Dependencies +This program and the accompanying materials are made available under the terms +of the Apache License, Version 2.0 which is available at +https://www.apache.org/licenses/LICENSE-2.0. -cal10n +SPDX-License-Identifier: Apache-2.0 -Copyright (c) 2009 QOS.ch -All rights reserved. +## Source Code -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: +The project maintains the following source code repositories: -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +https://github.com/eclipse-ee4j/injection-api -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -================================================================================ +############################################################# -Jansi +License_Url: https://opensource.org/licenses/Apache-2.0 -jansi (org.fusesource.jansi:jansi) -Copyright (C) 2009-2021 the original author(s). --------------------------------------------- Apache License Version 2.0, January 2004 @@ -1798,36 +1030,27 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------- -Fourth Party Dependencies ----------------------------------------------- -HawtJNI -Copyright (C) 2009-2011 FuseSource Corp. -Copyright (c) 2004, 2008 IBM Corporation and others. -This product includes software developed by FuseSource Corp. -http://fusesource.com -This product includes software developed at Progress Software Corporation and/or -its subsidiaries or affiliates. -This product includes software developed by IBM Corporation and others. - -Apache License Version 2.0 +############################################################# ================================================================================ Micronaut Starter -Copyright 2017-2022 original authors - Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + 1. Definitions. + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, @@ -1835,19 +1058,24 @@ control with that entity. For the purposes of this definition, direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications @@ -1855,6 +1083,7 @@ represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally @@ -1868,15 +1097,18 @@ and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable @@ -1892,19 +1124,24 @@ or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained @@ -1921,12 +1158,14 @@ notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of @@ -1934,10 +1173,12 @@ this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, @@ -1947,6 +1188,7 @@ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly @@ -1958,6 +1200,7 @@ Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, @@ -1968,8 +1211,11 @@ of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS + APPENDIX: How to apply the Apache License to your work. + To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include @@ -1978,147 +1224,762 @@ comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + Copyright [yyyy] [name of copyright owner] + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +Copyright 2017-2023 original authors +------------------------------------ + + LICENSES LIST ------------- com.fasterxml.jackson.core:jackson-core -======================================= +==================================== +Apache-2.0: License +Copyrights +---------- +Copyright 2018-2020 Raffaello Giulietti +Copyright (c) 2007- Tatu Saloranta, tatu.saloranta@iki.fi + +FastDoubleParser License, Notice and its dependencies +================================================== +FastDoubleParser LICENSE +------------------------------ +MIT License + +Copyright (c) 2023 Werner Randelshofer, Switzerland. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +---------------------------------- +FastDoubleParser NOTICE file +# FastDoubleParser + +This is a Java port of Daniel Lemire's fast_float project. +This project provides parsers for double, float, BigDecimal and BigInteger +values. + +## Copyright + +Copyright © 2023 Werner Randelshofer, Switzerland. + +## Licensing + +This code is licensed under MIT License. +https://github.com/wrandelshofer/FastDoubleParser/blob/522be16e145f43308c43b23094e31d5efcaa580e/LICENSE +(The file 'LICENSE' is included in the sources and classes Jar files that are +released by this project +- as is required by that license.) + +Some portions of the code have been derived from other projects. +All these projects require that we include a copyright notice, and some require +that we also include some text of their +license file. + +fast_double_parser, Copyright (c) 2022 Daniel Lemire. BSL License. +https://github.com/lemire/fast_double_parser +https://github.com/lemire/fast_double_parser/blob/07d9189a8fb815fe800cb15ca022e7a07093236e/LICENSE.BSL +(The file 'thirdparty-LICENSE' is included in the sources and classes Jar files +that are released by this project +- as is required by that license.) + +fast_float, Copyright (c) 2021 The fast_float authors. MIT License. +https://github.com/fastfloat/fast_float +https://github.com/fastfloat/fast_float/blob/cc1e01e9eee74128e48d51488a6b1df4a767a810/LICENSE- +MIT +(The file 'thirdparty-LICENSE' is included in the sources and classes Jar files +that are released by this project +- as is required by that license.) + +bigint, Copyright 2020 Tim Buktu. 2-clause BSD License. +https://github.com/tbuktu/bigint/tree/floatfft +https://github.com/tbuktu/bigint/blob/617c8cd8a7c5e4fb4d919c6a4d11e2586107f029/LICENSE +https://github.com/wrandelshofer/FastDoubleParser/blob/39e123b15b71f29a38a087d16a0bc620fc879aa6/bigint- +LICENSE +(We only use those portions of the bigint project that can be licensed under 2- +clause BSD License.) +(The file 'thirdparty-LICENSE' is included in the sources and classes Jar files +that are released by this project +- as is required by that license.) +------ +Third-party license for FastDoubleParser + +fast_float, Copyright (c) 2021 The fast_float authors. MIT License. +https://github.com/fastfloat/fast_float +https://github.com/fastfloat/fast_float/blob/cc1e01e9eee74128e48d51488a6b1df4a767a810/LICENSE- +MIT + +MIT License + +Copyright (c) 2021 The fast_float authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------ +Third-party license for +bigint, Copyright 2020 Tim Buktu. 2-clause BSD License. +https://github.com/tbuktu/bigint/tree/floatfft +https://github.com/tbuktu/bigint/blob/617c8cd8a7c5e4fb4d919c6a4d11e2586107f029/LICENSE +https://github.com/wrandelshofer/FastDoubleParser/blob/39e123b15b71f29a38a087d16a0bc620fc879aa6/bigint- +LICENSE +(We only use those portions of the bigint project that can be licensed under 2- +clause BSD License.) + +2-clause BSD License + +Copyright 2022 Tim Buktu + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------ +fast_double_parser LICENSE +Copyright (c) Daniel Lemire + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +com.fasterxml.jackson.core:jackson-databind +======================================== Apache-2.0: LICENSE ------- +Same as above listed license + NOTICE ------ # Jackson JSON processor + Jackson is a high-performance, Free/Open Source JSON processing library. It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has been in development since 2007. It is currently developed by a community of developers. + ## Copyright + Copyright 2007-, Tatu Saloranta (tatu.saloranta@iki.fi) + ## Licensing + Jackson 3.x core and extension components are licensed under Apache License 2.0 To find the details that apply to this artifact see the accompanying LICENSE file. + ## Credits + A list of contributors may be found from CREDITS file, which is included in some artifacts (usually source distributions); but is always available from the source code management (SCM) system project uses. -Copyrights ----------- -Copyright 2018-2020 Raffaello Giulietti -Copyright (c) 2007- Tatu Saloranta, tatu.saloranta@iki.fi -com.fasterxml.jackson.core:jackson-databind -=========================================== -Apache-2.0: LICENSE -------- -Same as com.fasterxml.jackson.core:jackson-core -NOTICE ------- -Same as com.fasterxml.jackson.core:jackson-core + + + Copyrights ---------- Copyright 2015 Ben Manes. All Rights Reserved. -Copyright 2010 Google Inc. All Rights Reserved. -com.fasterxml.jackson.datatype:jackson-datatype-jdk8 -==================================================== -Apache-2.0: LICENSE -------- -Same as com.fasterxml.jackson.core:jackson-core -NOTICE ------- -# Jackson JSON processor -Jackson is a high-performance, Free/Open Source JSON processing library. -It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has -been in development since 2007. -It is currently developed by a community of developers. -## Licensing -Jackson components are licensed under Apache (Software) License, version 2.0, -as per accompanying LICENSE file. -## Credits -A list of contributors may be found from CREDITS file, which is included -in some artifacts (usually source distributions); but is always available -from the source code management (SCM) system project uses. -Copyrights ----------- -Copyright 2013 FasterXML.com -Copyright 2007-present the original author or authors. +Copyright 2011 Google Inc. All Rights Reserved. + + com.fasterxml.jackson.datatype:jackson-datatype-jsr310 -====================================================== -Apache-2.0: LICENSE -------- -Same as com.fasterxml.jackson.core:jackson-core -NOTICE ------- -Same as com.fasterxml.jackson.module:jackson-modules-java8 +=================================================== +Apache-2.0: License Copyrights ---------- -Copyright 2013 FasterXML.com Copyright 2007-present the original author or authors. +Copyright 2013 FasterXML.com + + com.fizzed:rocker-runtime -========================= -Apache-2.0: LICENSE +====================== +Apache-2.0: License Copyrights ---------- -Copyright 2016 Fizzed, Inc. +Copyright 2015 Fizzed Inc. Copyright 2015 Fendler Consulting cc. + + com.googlecode.javaewah:JavaEWAH -================================ +============================= Apache-2.0: LICENSE + + com.typesafe:config -=================== -Apache-2.0: https://www.apache.org/licenses/LICENSE-2.0 +================ +Apache-2.0: License Copyrights ---------- Copyright (C) 2011-2012 Typesafe Inc. + + info.picocli:picocli-shell-jline3 -================================= +============================== Apache-2.0: LICENSE ------- -Same as com.fasterxml.jackson.core:jackson-core +Same as above listed license + + Copyrights ---------- -Copyright 2017 Remko Popma Copyright 2017 Robert 'Bobby' Zenz -Copyright 2017 the original author or authors. -info.picocli:picocli -==================== -Apache-2.0: LICENSE -------- -Same as com.fasterxml.jackson.core:jackson-core -Copyrights ----------- Copyright 2017 Remko Popma -Copyright 2017 Robert 'Bobby' Zenz Copyright 2017 the original author or authors. + + io.github.java-diff-utils:java-diff-utils -========================================= +====================================== Apache-2.0: LICENSE ------- -Same as com.fasterxml.jackson.core:jackson-core +Same as above listed license + + +Copyrights +---------- +Copyright 2017 java-diff-utils. +Copyright (C) 2009 - 2017 java-diff-utils + + +io.netty:netty-buffer +================== +Apache-2.0: NOTICE +------ + +Copyright 2012,2021 The Netty Project +Copyright 2014 Twitter, Inc. +Copyright (c) 2011, Joe Walnes and contributors +Copyright (c) 2008-2009 Bjoern Hoehrmann +Copyright (c) 2004-2011 QOS.ch +-------------------------------------------- + +The Netty Project +============== +Please visit the Netty web site for more information: + +* https://netty.io/ + +Copyright 2014 The Netty Project + +The Netty Project licenses this file to you under the Apache License, +version 2.0 (the "License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at: + +https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. + +Also, please refer to each LICENSE..txt file, which is located in +the 'license' directory of the distribution file, for the license terms of the +components that this product depends on. + +------------------------------------------------------------------------------- +This product contains the extensions to Java Collections Framework which has +been derived from the works by JSR-166 EG, Doug Lea, and Jason T. Greene: + +* LICENSE: +* license/LICENSE.jsr166y.txt (Public Domain) +The person or persons who have associated work with this document (the +"Dedicator" or "Certifier") hereby either (a) certifies that, to the best of +his knowledge, the work of authorship identified is in the public domain of +the country from which the work is published, or (b) hereby dedicates whatever +copyright the dedicators holds in the work of authorship identified below (the +"Work") to the public domain. A certifier, moreover, dedicates any copyright +interest he may have in the associated work, and for these purposes, is +described as a "dedicator" below. + +A certifier has taken reasonable steps to verify the copyright status of this +work. Certifier recognizes that his good faith efforts may not shield him from +liability if in fact the work certified is not in the public domain. + +Dedicator makes this dedication for the benefit of the public at large and to +the detriment of the Dedicator's heirs and successors. Dedicator intends this +dedication to be an overt act of relinquishment in perpetuity of all present +and future rights under copyright law, whether vested or contingent, in the +Work. Dedicator understands that such relinquishment of all rights includes +the relinquishment of all rights to enforce (by lawsuit or otherwise) those +copyrights in the Work. + +Dedicator recognizes that, once placed in the public domain, the Work may be +freely reproduced, distributed, transmitted, used, modified, built upon, or +otherwise exploited by anyone for any purpose, commercial or non-commercial, +and in any way, including by methods that have not yet been invented or +conceived. +* HOMEPAGE: +* http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/ +* http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbosscache/experimental/jsr166/ +----------------------------------------------------------------------------------- +This product contains a modified version of Robert Harder's Public Domain +Base64 Encoder and Decoder, which can be obtained at: + +* LICENSE: +* license/LICENSE.base64.txt (Public Domain) +The person or persons who have associated work with this document (the +"Dedicator" or "Certifier") hereby either (a) certifies that, to the best of +his knowledge, the work of authorship identified is in the public domain of +the country from which the work is published, or (b) hereby dedicates whatever +copyright the dedicators holds in the work of authorship identified below (the +"Work") to the public domain. A certifier, moreover, dedicates any copyright +interest he may have in the associated work, and for these purposes, is +described as a "dedicator" below. + +A certifier has taken reasonable steps to verify the copyright status of this +work. Certifier recognizes that his good faith efforts may not shield him from +liability if in fact the work certified is not in the public domain. + +Dedicator makes this dedication for the benefit of the public at large and to +the detriment of the Dedicator's heirs and successors. Dedicator intends this +dedication to be an overt act of relinquishment in perpetuity of all present +and future rights under copyright law, whether vested or contingent, in the +Work. Dedicator understands that such relinquishment of all rights includes +the relinquishment of all rights to enforce (by lawsuit or otherwise) those +copyrights in the Work. + +Dedicator recognizes that, once placed in the public domain, the Work may be +freely reproduced, distributed, transmitted, used, modified, built upon, or +otherwise exploited by anyone for any purpose, commercial or non-commercial, +and in any way, including by methods that have not yet been invented or +conceived. +* HOMEPAGE: +* http://iharder.sourceforge.net/current/java/base64/ +------------------------------------------------------------------------------------- +This product contains a modified portion of 'Webbit', an event based +WebSocket and HTTP server, which can be obtained at: + +* LICENSE: +* license/LICENSE.webbit.txt (BSD License) +(BSD License: https://www.opensource.org/licenses/bsd-license) + +Copyright (c) 2011, Joe Walnes, Aslak Hellesøy and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of the Webbit nor the names of +its contributors may be used to endorse or promote products +derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +* HOMEPAGE: +* https://github.com/joewalnes/webbit +-------------------------------------------------------------------------------- +This product contains a modified portion of 'SLF4J', a simple logging +facade for Java, which can be obtained at: + +* LICENSE: +* license/LICENSE.slf4j.txt (MIT License) +/* +* Copyright (c) 2004-2007 QOS.ch +* All rights reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +* HOMEPAGE: +* https://www.slf4j.org/ +------------------------------------------------------------------------------------------------ +This product contains a modified portion of 'Apache Harmony', an open source +Java SE, which can be obtained at: + +* NOTICE: +* license/NOTICE.harmony.txt +Apache Harmony + +Copyright 2006, 2010 The Apache Software Foundation. + +This product includes software developed at +The Apache Software Foundation (https://www.apache.org/). +* LICENSE: +* license/LICENSE.harmony.txt (Apache License 2.0) + +* HOMEPAGE: +* https://archive.apache.org/dist/harmony/ +------------------------------------------------------------------------------------------ +This product contains a modified portion of 'jbzip2', a Java bzip2 compression +and decompression library written by Matthew J. Francis. It can be obtained at: + +* LICENSE: +* license/LICENSE.jbzip2.txt (MIT License) +Copyright (c) 2010-2011 Matthew J. Francis and Contributors of the jbzip2 +Project + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +* HOMEPAGE: +* https://code.google.com/p/jbzip2/ +-------------------------------------------------------------------------------------------------------- +This product contains a modified portion of 'libdivsufsort', a C API library to +construct +the suffix array and the Burrows-Wheeler transformed string for any input string +of +a constant-size alphabet written by Yuta Mori. It can be obtained at: + +* LICENSE: +* license/LICENSE.libdivsufsort.txt (MIT License) +Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +* HOMEPAGE: +* https://github.com/y-256/libdivsufsort +------------------------------------------------------------------------------------------------- +This product contains a modified portion of Nitsan Wakart's 'JCTools', Java +Concurrency Tools for the JVM, +which can be obtained at: + +* LICENSE: +* license/LICENSE.jctools.txt (ASL2 License) +* HOMEPAGE: +* https://github.com/JCTools/JCTools + +----------------------------------------------------------------------------------------------------- +This product contains a modified portion of 'jfastlz', a Java port of FastLZ +compression +and decompression library written by William Kinney. It can be obtained at: + +* LICENSE: +* license/LICENSE.jfastlz.txt (MIT License) +The MIT License + +Copyright (c) 2009 William Kinney + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +* HOMEPAGE: +* https://code.google.com/p/jfastlz/ + +-------------------------------------------------------------------------------------------- +This product contains a modified version of 'HPACK', a Java implementation of +the HTTP/2 HPACK algorithm written by Twitter. It can be obtained at: + +* LICENSE: +* license/LICENSE.hpack.txt (Apache License 2.0) +* HOMEPAGE: +* https://github.com/twitter/hpack +-------------------------------------------------------------------------------------------------- +This product contains a modified version of 'HPACK', a Java implementation of +the HTTP/2 HPACK algorithm written by Cory Benfield. It can be obtained at: + +* LICENSE: +* license/LICENSE.hyper-hpack.txt (MIT License) +The MIT License (MIT) + +Copyright (c) 2014 Cory Benfield + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +* HOMEPAGE: +* https://github.com/python-hyper/hpack/ +-------------------------------------------------------------------------------------------------------- +This product contains a modified version of 'HPACK', a Java implementation of +the HTTP/2 HPACK algorithm written by Tatsuhiro Tsujikawa. It can be obtained +at: + +* LICENSE: +* license/LICENSE.nghttp2-hpack.txt (MIT License) +The MIT License + +Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa +Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* HOMEPAGE: +* https://github.com/nghttp2/nghttp2/ +------------------------------------------------------------------------------------------------------ +This product contains a modified portion of 'Apache Commons Lang', a Java +library +provides utilities for the java.lang API, which can be obtained at: + +* LICENSE: +* license/LICENSE.commons-lang.txt (Apache License 2.0) +* HOMEPAGE: +* https://commons.apache.org/proper/commons-lang/ + +----------------------------------------------------------------------------------------------------------- +This product contains the Maven wrapper scripts from 'Maven Wrapper', that +provides an easy way to ensure a user has everything necessary to run the Maven +build. + +* LICENSE: +* license/LICENSE.mvn-wrapper.txt (Apache License 2.0) +* HOMEPAGE: +* https://github.com/takari/maven-wrapper +------------------------------------------------------------------------------------------------------------ +This product contains the dnsinfo.h header file, that provides a way to retrieve +the system DNS configuration on MacOS. +This private header is also used by Apple's open source +mDNSResponder (https://opensource.apple.com/tarballs/mDNSResponder/). + +* LICENSE: +* license/LICENSE.dnsinfo.txt (Apple Public Source License 2.0) +/* +* Copyright (c) 2004-2006, 2008, 2009, 2011 Apple Inc. All rights reserved. +* +* @APPLE_LICENSE_HEADER_START@ +* +* This file contains Original Code and/or Modifications of Original Code +* as defined in and that are subject to the Apple Public Source License +* Version 2.0 (the 'License'). You may not use this file except in +* compliance with the License. Please obtain a copy of the License at +* https://www.opensource.apple.com/apsl/ and read it before using this +* file. +* +* The Original Code and all software distributed under the License are +* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, +* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. +* Please see the License for the specific language governing rights and +* limitations under the License. +* +* @APPLE_LICENSE_HEADER_END@ +*/ +* HOMEPAGE: +* https://www.opensource.apple.com/source/configd/configd- +453.19/dnsinfo/dnsinfo.h + + +io.netty:netty-codec-http2 +io.netty:netty-codec-http +io.netty:netty-codec-socks +io.netty:netty-codec +io.netty:netty-common +io.netty:netty-handler-proxy +io.netty:netty-handler +io.netty:netty-resolver +io.netty:netty-transport-native-unix-common +io.netty:netty-transport +===================== +Apache-2.0: License as listed above +------ + Copyrights ---------- -Copyright 2017 java-diff-utils. -Copyright (C) 2009 - 2017 java-diff-utils +Copyright 2014 The Netty Project + + io.projectreactor:reactor-core -============================== +=========================== Apache-2.0: LICENSE ------- -Same as com.fasterxml.jackson.core:jackson-core +Same as above listed license + + Copyrights ---------- -Copyright (c) 2022 VMware Inc. or its affiliates, All Rights Reserved. +Copyright (c) 2019-2021 VMware Inc. or its affiliates, All Rights Reserved. Copyright 2002-2017 the original author or authors. + + io.swagger.core.v3:swagger-annotations -====================================== +=================================== Apache-2.0: LICENSE + NOTICE ------ Swagger Core - ${pom.name} @@ -2128,18 +1989,25 @@ Copy of the Apache 2.0 license can be found in `LICENSE` file. Copyrights ---------- Copyright 2007-present the original author or authors. + + jakarta.annotation:jakarta.annotation-api -========================================= +====================================== EPL-2.0: LICENSE ---------- # Eclipse Public License - v 2.0 + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + 1. DEFINITIONS + "Contribution" means: + a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and + b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; @@ -2149,18 +2017,24 @@ and are Distributed by that particular Contributor. A Contribution such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works. + "Contributor" means any person or entity that Distributes the Program. + "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. + "Program" means the Contributions Distributed in accordance with this Agreement. + "Recipient" means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors. + "Derivative Works" shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. + "Modified Works" shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file @@ -2169,21 +2043,27 @@ Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or Modified Works thereof. + "Distribute" means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy. + "Source Code" means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files. + "Secondary License" means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor. + 2. GRANT OF RIGHTS + a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works. + b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, @@ -2195,6 +2075,7 @@ of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. + c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the @@ -2208,22 +2089,28 @@ property rights needed, if any. For example, if a third party patent license is required to allow Recipient to Distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. + d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. + e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3). + 3. REQUIREMENTS + 3.1 If a Contributor Distributes the Program in any form, then: + a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and + b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license: i) effectively disclaims on behalf of all other Contributors all @@ -2231,29 +2118,38 @@ warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; + ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; + iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and + iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3. + 3.2 When the Program is Distributed as Source Code: + a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and + b) a copy of this Agreement must be included with each copy of the Program. + 3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability ("notices") contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices. + 4. COMMERCIAL DISTRIBUTION + Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, @@ -2275,6 +2171,7 @@ writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. + For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance @@ -2285,7 +2182,9 @@ defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. + 5. NO WARRANTY + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR @@ -2297,7 +2196,9 @@ risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. + 6. DISCLAIMER OF LIABILITY + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, @@ -2307,18 +2208,22 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + 7. GENERAL + If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. + All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of @@ -2327,6 +2232,7 @@ rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. + Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward @@ -2341,6 +2247,7 @@ Distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to Distribute the Program (including its Contributions) under the new version. + Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, @@ -2348,27 +2255,38 @@ estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement. + Exhibit A - Form of Secondary Licenses Notice + "This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}." + Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses. + If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. + You may add additional accurate notices of copyright ownership. + --- + ## The GNU General Public License (GPL) Version 2, June 1991 + Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor Boston, MA 02110-1335 USA + Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + Preamble + The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to @@ -2377,37 +2295,46 @@ License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. + When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + The precise terms and conditions for copying, distribution and modification follow. + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers @@ -2417,30 +2344,37 @@ to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an @@ -2451,6 +2385,7 @@ conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in @@ -2460,31 +2395,38 @@ distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any @@ -2495,11 +2437,13 @@ normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will @@ -2507,6 +2451,7 @@ automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are @@ -2515,12 +2460,14 @@ modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or @@ -2533,10 +2480,12 @@ not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the @@ -2546,8 +2495,10 @@ contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may @@ -2555,10 +2506,12 @@ add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and @@ -2566,6 +2519,7 @@ conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the @@ -2573,7 +2527,9 @@ Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + NO WARRANTY + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR @@ -2583,6 +2539,7 @@ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR @@ -2592,58 +2549,78 @@ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + One line to give the program's name and a brief idea of what it does. Copyright (C) + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + Also add information on how to contact you by electronic and paper mail. + If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. + The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. + You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. + signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice + This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. + --- + ## CLASSPATH EXCEPTION + Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License version 2 cover the whole combination. + As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent @@ -2655,14 +2632,22 @@ based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. + + NOTICE.md --------- # Notices for Jakarta Annotations + This content is produced and maintained by the Jakarta Annotations project. + * Project home: https://projects.eclipse.org/projects/ee4j.ca + ## Trademarks + Jakarta Annotations is a trademark of the Eclipse Foundation. + ## Declared Project Licenses + This program and the accompanying materials are made available under the terms of the Eclipse Public License v. 2.0 which is available at http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made @@ -2670,97 +2655,146 @@ available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU General Public License, version 2 with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html. + SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ## Source Code + The project maintains the following source code repositories: + * https://github.com/eclipse-ee4j/common-annotations-api + ## Third-party Content + ## Cryptography + Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. -GPL2 w/ CPE: https://www.gnu.org/software/classpath/license.html + + Copyrights ---------- Copyright (c) 2020 Oracle andor its affiliates. All rights reserved. + + jakarta.inject:jakarta.inject-api -================================= -Apache-2.0: NOTICE.md +============================== +Apache-2.0: License as above +NOTICE.md --------- # Notices for Eclipse Jakarta Dependency Injection + This content is produced and maintained by the Eclipse Jakarta Dependency Injection project. + * Project home: https://projects.eclipse.org/projects/cdi.batch + ## Trademarks + Jakarta Dependency Injection is a trademark of the Eclipse Foundation. + ## Copyright + All content is the property of the respective authors or their employers. For more information regarding authorship of content, please consult the listed source code repository logs. + ## Declared Project Licenses + This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0 which is available at https://www.apache.org/licenses/LICENSE-2.0. + SPDX-License-Identifier: Apache-2.0 + ## Source Code + The project maintains the following source code repositories: + https://github.com/eclipse-ee4j/injection-api https://github.com/eclipse-ee4j/injection-spec https://github.com/eclipse-ee4j/injection-tck + ## Third-party Content + This project leverages the following third party content. + None + ## Cryptography + None -LICENSE ------------ -Same as com.fasterxml.jackson.core:jackson-core + + + Copyrights ---------- Copyright (C) 2009 The JSR-330 Expert Group -javax.inject:javax.inject -========================= -Apache-2.0: LICENSE -javax.validation:validation-api -=============================== -Apache-2.0: NOTICE.md + + +jakarta.validation:jakarta.validation-api +====================================== +Apache-2.0: License +NOTICE.md --------- # Notices for Eclipse Jakarta Bean Validation + This content is produced and maintained by the Eclipse Jakarta Bean Validation project. + * Project home: https://projects.eclipse.org/projects/ee4j.bean-validation + ## Trademarks + Jakarta Bean Validation is a trademark of the Eclipse Foundation. + ## Copyright + All content is the property of the respective authors or their employers. For more information regarding authorship of content, please consult the listed source code repository logs. + ## Declared Project Licenses + This program and the accompanying materials are made available under the terms of the Apache License, Version 2.0 which is available at https://www.apache.org/licenses/LICENSE-2.0. + SPDX-License-Identifier: Apache-2.0 + ## Source Code + The project maintains the following source code repositories: + * [The specification repository](https://github.com/eclipse-ee4j/beanvalidation- spec) * [The API repository](https://github.com/eclipse-ee4j/beanvalidation-api) * [The TCK repository](https://github.com/eclipse-ee4j/beanvalidation-tck) + ## Third-party Content + This project leverages the following third party content. + Test dependencies: + * [TestNG](https://github.com/cbeust/testng) - Apache License 2.0 * [JCommander](https://github.com/cbeust/jcommander) - Apache License 2.0 * [SnakeYAML](https://bitbucket.org/asomov/snakeyaml/src) - Apache License 2.0 -LICENSE + + + +license.txt ----------- -Same as com.fasterxml.jackson.core:jackson-core +Same as above listed license + copyright.txt ------------- # List of contributors + Red Hat Inc. Akira Kawauchi Davide D'Alto @@ -2774,112 +2808,232 @@ Hardy Ferentschik Hendrik Ebbers Kevin Pollet Sebastian Thomschke + + + + +javax.inject:javax.inject +====================== +Apache-2.0:License as above + org.apache.commons:commons-compress -=================================== +================================ Apache-2.0: LICENSE +----------- +Same as above listed license + +NOTICE.txt +---------- +Apache Commons Compress +Copyright 2002-2023 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (https://www.apache.org/). + +--- + +The files in the package org.apache.commons.compress.archivers.sevenz +were derived from the LZMA SDK, version 9.20 (C/ and CPP/7zip/), +which has been placed in the public domain: + +"LZMA SDK is placed in the public domain." (http://www.7-zip.org/sdk.html) +Anyone is free to copy, modify, publish, use, compile, sell, or distribute the +original LZMA SDK code, either in source code form or as a compiled binary, for +any purpose, commercial or non-commercial, and by any means. + +--- + +The test file lbzip2_32767.bz2 has been copied from libbzip2's source +repository: + +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2019 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must +not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@acm.org + + + + org.bitbucket.b_c:jose4j -======================== +===================== Apache-2.0: LICENSE ------- -Same as com.fasterxml.jackson.core:jackson-core +Same as above listed license + NOTICE.txt ---------- jose4j Copyright 2012-2015 Brian Campbell + EcdsaUsingShaAlgorithm contains code for converting the concatenated R & S values of the signature to and from DER, which was originally derived from the Apache Santuario XML Security library's SignatureECDSA implementation. http://santuario.apache.org/ + The Base64 implementation in this software was derived from the Apache Commons Codec project. http://commons.apache.org/proper/commons-codec/ + JSON processing in this software was derived from the JSON.simple toolkit. https://code.google.com/p/json-simple/ + + + + Copyrights ---------- Copyright 2012-2017 Brian Campbell -org.bouncycastle:bcpkix-jdk15on -=============================== -Bouncy Castle Licence -Copyright (c) 2000 - 2021 The Legion of the Bouncy Castle Inc. + + +org.bouncycastle:bcpkix-jdk18on +org.bouncycastle:bcprov-jdk18on +org.bouncycastle:bcutil-jdk18on +============================ +Bouncy Castle Licence: +Copyright (c) 2000 - 2023 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org) + Permission is hereby granted, free of charge, to any person obtaining a copy of -this software -and associated documentation files (the "Software"), to deal in the Software -without restriction, -including without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software -is furnished to do so, -subject to the following conditions: +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all -copies or -substantial portions of the Software. +copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING -BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -org.bouncycastle:bcprov-jdk15on -=============================== -Bouncy Castle Licence -org.bouncycastle:bcutil-jdk15on -=============================== -Bouncy Castle Licence: +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + org.eclipse.jgit:org.eclipse.jgit -================================= -Eclipse Distribution License (New BSD License) -Eclipse Distribution License - v 1.0 -Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors. +============================== +under the terms of the Eclipse Distribution License v1.0 which +accompanies this distribution, is reproduced below, and is +available at http://www.eclipse.org/org/documents/edl-v10.php All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer -in the documentation and/or other materials provided with the distribution. -Neither the name of the Eclipse Foundation, Inc. nor the names of its -contributors may be used to endorse or promote products -derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY -OF SUCH DAMAGE. +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the following +conditions are met: +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. +- Neither the name of the Eclipse Foundation, Inc. nor the +names of its contributors may be used to endorse or promote +products derived from this software without specific prior +written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright (C) 2009, Google Inc. +Copyright (C) 2008, Shawn O. Pearce and others +Copyright (C) 2009, Igor Fedorenko +Copyright (C) 2008, Imran M Yousuf +Copyright (C) 2010, Matthias Sohn and others +Copyright (C) 2015, Andrey Loskutov and others +Copyright (C) 2010, Christian Halstrick +* Copyright (C) 2010, Stefan Lay and others +* Copyright (C) 2008, Robin Rosenberg +Copyright (C) 2017, Thomas Wolf and others +Copyright (C) 2008, Marek Zawirski +Copyright (C) 2007, Dave Watson +Copyright (C) 2009, Constantine Plotnikov +* Copyright (C) 2009, JetBrains s.r.o. +* Copyright (C) 2008, Mike Ralphson +Copyright (C) 2014, Alexey Kuznetsov +* Copyright (C) 2009, Mykola Nikishov +* Copyright (C) 2008, Robin Rosenberg +* Copyright (C) 2008, Shawn O. Pearce +* Copyright (C) 2010, Christian Halstrick +* Copyright (C) 2013, Robin Stocker +* Copyright (C) 2015, Patrick Steinhardt and others +* + org.fusesource.jansi:jansi -========================== +======================= +Copyright (C) 2009-2017 the original author(s). + +org.jetbrains:annotations +====================== Apache-2.0: LICENSE +Copyrights +---------- +Copyright 2000-2021 JetBrains s.r.o. + + org.jline:jline -=============== +============ BSD-3-Clause: LICENSE ----------- Copyright (c) 2002-2018, the original author or authors. All rights reserved. + https://opensource.org/licenses/BSD-3-Clause + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + Neither the name of JLine nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY @@ -2893,45 +3047,64 @@ AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + + Copyrights ---------- -Copyright (c) 2002-2018, the original author(s). +Copyright (c) 2002-2021, the original author(s). Copyright (c) 2002-2016, the original author or authors. + + org.reactivestreams:reactive-streams -==================================== +================================= MIT-0: LICENSE ------- MIT No Attribution + Copyright 2014 Reactive Streams + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + org.shredzone.acme4j:acme4j-client -================================== -Apache-2.0: LICENSE-APL.txt +=============================== +Apache-2.0: LICENSE Copyrights ---------- -Copyright (C) 2015 Richard "Shred" Körber +Copyright (C) 2016 Richard "Shred" Körber + + org.shredzone.acme4j:acme4j-utils -================================= -Apache-2.0: LICENSE-APL.txt +============================== +Apache-2.0: LICENSE-APL Copyrights ---------- -Copyright (C) 2015 Richard "Shred" Körber +Copyright (C) 2016 Richard "Shred" Körber + + org.slf4j:slf4j-api -=================== -MIT: LICENSE +org.slf4j:slf4j-nop +================ +MIT: LICENSE.txt ----------- Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) All rights reserved. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including @@ -2939,8 +3112,10 @@ without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND @@ -2948,75 +3123,112 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + Copyrights ---------- -Copyright (c) 2004-2011 QOS.ch -Copyright 2001-2004 The Apache Software Foundation. -Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) -Copyright (c) 2004-2013 QOS.ch, Copyright (C) 2015 Google Inc. -org.slf4j:slf4j-nop -=================== -MIT: LICENSE ------------ -Same as org.slf4j:slf4j-parent -Copyrights ----------- -Copyright (c) 2004-2011 QOS.ch +Copyright (c) 2004-2005 QOS.ch Copyright 2001-2004 The Apache Software Foundation. Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) Copyright (c) 2004-2013 QOS.ch, Copyright (C) 2015 Google Inc. + + + org.yaml:snakeyaml -================== +=============== Apache-2.0: LICENSE Copyrights ---------- Copyright (c) 2008, SnakeYAML +Copyright (c) 2008 Google Inc. Copyright 2003-2010 Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland -Copyright (c) 2008 Google Inc. -**************** + + +software.amazon.awscdk:aws-cdk-lib +software.amazon.awscdk:cdk-asset-awscli-v1 +software.amazon.awscdk:cdk-asset-kubectl-v20 +software.amazon.awscdk:cdk-asset-node-proxy-agent-v5 +=============================== +Apache-2.0: LICENSE + +NOTICE +------ +AWS Cloud Development Kit (AWS CDK) +Copyright 2018-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + +software.amazon.jsii:jsii-runtime +============================== +Apache-2.0: License +NOTICE +------ +jsii +Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + +software.constructs:constructs +=========================== +Apache-2.0: License + javax.annotation:javax.annotation-api -===================================== +================================== Copyright (c) 2005-2018 Oracle and/or its affiliates. All rights reserved. + COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.1 + 1. Definitions. + 1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications. + 1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. + 1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. + 1.4. "Executable" means the Covered Software in any form other than Source Code. + 1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License. + 1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. + 1.7. "License" means this document. + 1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. + 1.9. "Modifications" means the Source Code and Executable form of any of the following: + A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; + B. Any new file that contains any part of the Original Software or previous Modification; or + C. Any new file that is contributed or otherwise made available under the terms of this License. + 1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License. + 1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. + 1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. + 1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which @@ -3026,39 +3238,50 @@ or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. + 2. License Grants. + 2.1. The Initial Developer Grant. + Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: + (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and + (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). + (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. + (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. + 2.2. Contributor Grant. + Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: + (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and + (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such @@ -3067,9 +3290,11 @@ otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). + (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. + (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third @@ -3078,8 +3303,11 @@ of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. + 3. Distribution Obligations. + 3.1. Availability of Source Code. + Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms @@ -3089,19 +3317,25 @@ or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. + 3.2. Modifications. + The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. + 3.3. Required Notices. + You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. + 3.4. Application of Additional Terms. + You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to @@ -3114,7 +3348,9 @@ liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. + 3.5. Distribution of Executable Versions. + You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, @@ -3128,20 +3364,27 @@ are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. + 3.6. Larger Works. + You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. + 4. Versions of the License. + 4.1. New Versions. + Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. + 4.2. Effect of New Versions. + You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If @@ -3153,7 +3396,9 @@ of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. + 4.3. Modified Versions. + When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and @@ -3161,7 +3406,9 @@ remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. + 5. DISCLAIMER OF WARRANTY. + COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE @@ -3173,12 +3420,15 @@ OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + 6. TERMINATION. + 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. + 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You @@ -3195,6 +3445,7 @@ expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. + 6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by @@ -3203,11 +3454,14 @@ infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. + 6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. + 7. LIMITATION OF LIABILITY. + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF @@ -3223,7 +3477,9 @@ PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + 8. U.S. GOVERNMENT END USERS. + The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. § @@ -3235,7 +3491,9 @@ with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. + 9. MISCELLANEOUS. + This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent @@ -3256,30 +3514,42 @@ agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. + 10. RESPONSIBILITY FOR CLAIMS. + As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. + ------------------------------------------------------------------------ + NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) + The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. + + + The GNU General Public License (GPL) Version 2, June 1991 + Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor Boston, MA 02110-1335 USA + Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + Preamble + The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to @@ -3288,37 +3558,46 @@ License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. + When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + The precise terms and conditions for copying, distribution and modification follow. + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers @@ -3328,30 +3607,37 @@ to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an @@ -3362,6 +3648,7 @@ conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in @@ -3371,31 +3658,38 @@ distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any @@ -3406,11 +3700,13 @@ normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will @@ -3418,6 +3714,7 @@ automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are @@ -3426,12 +3723,14 @@ modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or @@ -3444,10 +3743,12 @@ not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the @@ -3457,8 +3758,10 @@ contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may @@ -3466,10 +3769,12 @@ add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and @@ -3477,6 +3782,7 @@ conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the @@ -3484,7 +3790,9 @@ Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + NO WARRANTY + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR @@ -3494,6 +3802,7 @@ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR @@ -3503,53 +3812,71 @@ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + One line to give the program's name and a brief idea of what it does. Copyright (C) + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + Also add information on how to contact you by electronic and paper mail. + If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. + The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. + You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. + signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice + This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. + # + Certain source files distributed by Oracle America, Inc. and/or its affiliates are subject to the following clarification and special exception to the GPLv2, based on the GNU Project exception for its @@ -3558,12 +3885,14 @@ where Oracle has expressly included in the particular source file's header the words "Oracle designates this particular file as subject to the "Classpath" exception as provided by Oracle in the LICENSE file that accompanied this code." + You should also note that Oracle includes multiple, independent programs in this software package. Some of those programs are provided under licenses deemed incompatible with the GPLv2 by the Free Software Foundation and others. For example, the package includes programs licensed under the Apache License, Version 2.0. Such programs are licensed to you under their original licenses. + Oracle facilitates your further distribution of this package by adding the Classpath Exception to the necessary parts of its GPLv2 code, which permits you to use that code in combination with other independent @@ -3579,16 +3908,19 @@ since the GPLv2 is incompatible with the license terms of some items included in the distribution by Oracle, removing the Classpath Exception could therefore effectively compromise your ability to further distribute the package. + Proceed with caution and we recommend that you obtain the advice of a lawyer skilled in open source matters before removing the Classpath Exception or making modifications to this package which may subsequently be redistributed and/or involve the use of third party software. + CLASSPATH EXCEPTION Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License version 2 cover the whole combination. + As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent @@ -3598,4 +3930,4 @@ independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to -do so. If you do not wish to do so, delete this exception statement +do so. If you do not wish to do so, delete this exception statement \ No newline at end of file diff --git a/gcn/buildSrc/build.gradle b/gcn/buildSrc/build.gradle index f5b04a7..d7f0cd4 100644 --- a/gcn/buildSrc/build.gradle +++ b/gcn/buildSrc/build.gradle @@ -24,9 +24,13 @@ repositories { } dependencies { + implementation libs.micronaut.application + implementation libs.micronaut.library implementation libs.nohttp implementation libs.rocker + implementation libs.shadow implementation libs.spotless + implementation libs.test.logger } gradlePlugin { diff --git a/gcn/buildSrc/src/main/groovy/gcn-base.gradle b/gcn/buildSrc/src/main/groovy/gcn-base.gradle index ee2595b..17d8ab6 100644 --- a/gcn/buildSrc/src/main/groovy/gcn-base.gradle +++ b/gcn/buildSrc/src/main/groovy/gcn-base.gradle @@ -34,12 +34,12 @@ repositories { dependencies { compileOnly mnLibs.jsr305 // for 'warning: unknown enum constant When.MAYBE' implementation mnLibs.jakarta.annotation.api - runtimeOnly mnLibs.logback + runtimeOnly libs.logback.classic } java { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } java { diff --git a/gcn/gcn-cli/build.gradle b/gcn/gcn-cli/build.gradle index 4d71392..de4a45a 100644 --- a/gcn/gcn-cli/build.gradle +++ b/gcn/gcn-cli/build.gradle @@ -16,8 +16,8 @@ plugins { id 'gcn-module' - alias libs.plugins.micronaut.application - alias libs.plugins.shadow + id 'io.micronaut.application' + id 'com.github.johnrengelman.shadow' } dependencies { @@ -26,7 +26,7 @@ dependencies { compileOnly mnLibs.graal // not in libs.versions.toml to keep Micronaut version in 1 place (micronautVersion.txt) - implementation("io.micronaut.starter:micronaut-micronaut-cli:$micronautVersion") { + implementation("io.micronaut.starter:micronaut-cli:$micronautVersion") { exclude group: 'io.micronaut', module: 'micronaut-buffer-netty' exclude group: 'io.micronaut', module: 'micronaut-http-client' exclude group: 'io.micronaut', module: 'micronaut-http-client-core' @@ -59,6 +59,10 @@ dependencies { implementation projects.gcnCore } +configurations.all { + exclude module: 'logback-classic' +} + application { mainClass.set 'cloud.graal.gcn.GcnStarter' } diff --git a/gcn/gcn-core/build.gradle b/gcn/gcn-core/build.gradle index a008ebe..90a9c44 100644 --- a/gcn/gcn-core/build.gradle +++ b/gcn/gcn-core/build.gradle @@ -17,7 +17,7 @@ plugins { id 'gcn-module' id 'gcn.rocker' - alias libs.plugins.micronaut.library + id 'io.micronaut.library' } dependencies { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnGeneratorContext.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnGeneratorContext.java index df289ba..9e90938 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnGeneratorContext.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnGeneratorContext.java @@ -19,7 +19,7 @@ import cloud.graal.gcn.feature.GcnFeatureContext; import cloud.graal.gcn.feature.GcnFeatures; import cloud.graal.gcn.model.GcnCloud; -import cloud.graal.gcn.template.GcnYamlTemplate; +import cloud.graal.gcn.template.GcnPropertiesTemplate; import cloud.graal.gcn.template.TemplatePostProcessor; import com.fizzed.rocker.RockerModel; import io.micronaut.core.annotation.NonNull; @@ -39,6 +39,7 @@ import io.micronaut.starter.feature.DefaultFeature; import io.micronaut.starter.feature.Feature; import io.micronaut.starter.feature.RequireEagerSingletonInitializationFeature; +import io.micronaut.starter.feature.aws.AwsCloudFeature; import io.micronaut.starter.feature.build.BuildFeature; import io.micronaut.starter.feature.build.BuildPluginFeature; import io.micronaut.starter.feature.config.ApplicationConfiguration; @@ -54,6 +55,7 @@ import io.micronaut.starter.options.DefaultTestRockerModelProvider; import io.micronaut.starter.options.Language; import io.micronaut.starter.options.TestRockerModelProvider; +import io.micronaut.starter.template.PropertiesTemplate; import io.micronaut.starter.template.RockerTemplate; import io.micronaut.starter.template.Template; import io.micronaut.starter.template.URLTemplate; @@ -74,7 +76,9 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import static cloud.graal.gcn.GcnUtils.APP_MODULE; import static cloud.graal.gcn.GcnUtils.LIB_MODULE; +import static cloud.graal.gcn.model.GcnCloud.AWS; import static cloud.graal.gcn.model.GcnCloud.NONE; import static io.micronaut.context.env.Environment.DEVELOPMENT; import static io.micronaut.context.env.Environment.FUNCTION; @@ -105,15 +109,18 @@ public class GcnGeneratorContext extends GeneratorContext { private static final String PLUGIN_GRADLE_AZUREFUNCTIONS = "com.microsoft.azure.azurefunctions"; private static final String PLUGIN_MAVEN_AZUREFUNCTIONS = "azure-functions-maven-plugin"; private static final Map PLUGIN_GAVS = Map.of( - "com.github.johnrengelman.shadow:7.1.2", "gradle.plugin.com.github.johnrengelman:shadow:7.1.2", - "io.micronaut.application:3.7.2", "io.micronaut.gradle:micronaut-gradle-plugin:3.7.2", - "io.micronaut.library:3.7.2", "io.micronaut.gradle:micronaut-gradle-plugin:3.7.2", - "io.micronaut.test-resources:3.7.2", "io.micronaut.gradle:micronaut-test-resources-plugin:3.7.2", - "org.jetbrains.kotlin.jvm:1.6.21", "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21", - "org.jetbrains.kotlin.kapt:1.6.21", "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21", - "org.jetbrains.kotlin.plugin.allopen:1.6.21", "org.jetbrains.kotlin:kotlin-allopen:1.6.21", - "com.google.cloud.tools.jib:2.8.0", "com.google.cloud.tools.jib:com.google.cloud.tools.jib.gradle.plugin:2.8.0" + "com.github.johnrengelman.shadow:8.1.1", "com.github.johnrengelman:shadow:8.1.1", + "io.micronaut.application:4.0.2", "io.micronaut.gradle:micronaut-gradle-plugin:4.0.2", + "io.micronaut.library:4.0.2", "io.micronaut.gradle:micronaut-gradle-plugin:4.0.2", + "io.micronaut.test-resources:4.0.2", "io.micronaut.gradle:micronaut-test-resources-plugin:4.0.2", + "org.jetbrains.kotlin.jvm:1.8.22", "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22", + "org.jetbrains.kotlin.kapt:1.8.22", "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22", + "org.jetbrains.kotlin.plugin.allopen:1.8.22", "org.jetbrains.kotlin:kotlin-allopen:1.8.22", + "com.google.cloud.tools.jib:2.8.0", "com.google.cloud.tools.jib:com.google.cloud.tools.jib.gradle.plugin:2.8.0", + "io.micronaut.aot:4.0.2", "io.micronaut.gradle:micronaut-aot-plugin:4.0.2", + "com.google.devtools.ksp:1.8.22-1.0.11", "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:1.8.22-1.0.11" ); + private static final String ORACLE_REPOSITORY_VERSION = "-oracle-00001"; private GcnCloud cloud = NONE; private boolean hideLibFeatures; @@ -156,7 +163,7 @@ public GcnGeneratorContext(Project project, clouds = new HashSet<>(cloudFeatures.keySet()); clouds.add(NONE); // for lib module buildProperties = new GcnBuildProperties(this, clouds); - buildProperties.put(key, VersionInfo.getMicronautVersion()); + buildProperties.put(key, VersionInfo.getMicronautVersion() + ORACLE_REPOSITORY_VERSION); } private static Map splitFeatures(Set allFeatures, @@ -169,7 +176,21 @@ private static Map splitFeatures(Set allFeatures Set defaultFeatures = new HashSet<>(); Set specifiedFeatures = new HashSet<>(); + Collection initialClouds = new HashSet<>(); for (Feature feature : allFeatures) { + if (feature instanceof GcnFeature) { + initialClouds.add(((GcnFeature) feature).getCloud()); + } + } + + for (Feature feature : allFeatures) { + + if (feature instanceof AwsCloudFeature && !initialClouds.contains(AWS)) { + // AwsLambda implements DefaultFeature but causes problems when generating for non-AWS apps, + // and brings in other AWS features that implement AwsCloudFeature. + continue; + } + if (feature instanceof DefaultFeature && !(feature instanceof AwsLambda) && !(feature instanceof BuildFeature)) { @@ -665,10 +686,10 @@ public void addTemplate(String name, Template template) { } if (!template.getModule().equals(ROOT)) { - if (template instanceof GcnYamlTemplate) { - if (isPlatformIndependent() && template.getModule().equals(LIB_MODULE)) { + if (template instanceof GcnPropertiesTemplate) { + if (isPlatformIndependent() && (template.getModule().equals(LIB_MODULE) || template.getModule().equals(APP_MODULE))) { // for platform independent, re-route non-root templates to root - template = new GcnYamlTemplate(ROOT, template.getPath(), ((GcnYamlTemplate) template).getOriginalConfig()); + template = new GcnPropertiesTemplate(ROOT, template.getPath(), ((GcnPropertiesTemplate) template).getOriginalConfig()); } } else if (template instanceof RockerTemplate) { @@ -734,11 +755,11 @@ private boolean isIgnoredAppTemplate(String name, Template template) { return false; } - if (template instanceof GcnYamlTemplate && + if (template instanceof PropertiesTemplate && template.getModule().equals("lib") && "application-config".equals(name)) { - return true; // application.yml + return true; // application.properties } if (!(template instanceof RockerTemplate)) { @@ -936,6 +957,8 @@ private Set libFeatures() { * Workaround for this Gradle bug. * This is called from the buildSrc/build.gradle template to lookup the Maven G/A/V * coordinates for all plugins in all modules. + * + * @return the GAV strings, e.g. "io.micronaut.gradle:micronaut-test-resources-plugin:3.7.7" */ public Set getBuildPluginsGAV() { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnProjectGenerator.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnProjectGenerator.java index e1b1689..77cf162 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnProjectGenerator.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnProjectGenerator.java @@ -54,8 +54,8 @@ @Replaces(ProjectGenerator.class) public class GcnProjectGenerator implements ProjectGenerator { - private final GcnContextFactory contextFactory; private final List features; + private final GcnContextFactory contextFactory; /** * @param contextFactory context factory @@ -91,7 +91,6 @@ public void generate(ApplicationType applicationType, GcnGeneratorContext generatorContext = (GcnGeneratorContext) gc; addMicronautCli(generatorContext, applicationType); - generatorContext.applyFeatures(); try (GcnTemplateRenderer templateRenderer = new GcnTemplateRenderer(project, outputHandler, @@ -105,6 +104,15 @@ public void generate(ApplicationType applicationType, } } + /** + * Add a feature; only used in test project generation. + * + * @param feature the feature + */ + public void addFeature(Feature feature) { + features.add(feature); + } + private void addMicronautCli(GcnGeneratorContext generatorContext, ApplicationType applicationType) { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnUtils.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnUtils.java index a8f0c5b..2a3fc37 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnUtils.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/GcnUtils.java @@ -40,6 +40,8 @@ public final class GcnUtils { */ public static final String LIB_MODULE = "lib"; + public static final String APP_MODULE = "app"; + /** * The default JDK version if none is specified. */ diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/OracleCloudNettyClientDependencies.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/OracleCloudNettyClientDependencies.java index a0c3f5c..8e35f9c 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/OracleCloudNettyClientDependencies.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/OracleCloudNettyClientDependencies.java @@ -18,19 +18,20 @@ import io.micronaut.starter.application.generator.GeneratorContext; import io.micronaut.starter.build.dependencies.Dependency; +/** + * Implemented by OCI features that need Netty client dependencies. + */ public interface OracleCloudNettyClientDependencies { + /** + * Adds the dependencies. + * + * @param generatorContext the context + */ default void addNettyDependencies(GeneratorContext generatorContext) { generatorContext.addDependency(Dependency.builder() .groupId("io.micronaut.oraclecloud") .artifactId("micronaut-oraclecloud-httpclient-netty") .compile()); - - if (!generatorContext.getBuildTool().isGradle() && generatorContext.getFeatures().hasGraalvm()) { - generatorContext.addDependency(Dependency.builder() - .groupId("com.oracle.oci.sdk") - .artifactId("oci-java-sdk-addons-graalvm") - .compile()); - } } } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/GcnGradleBuild.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/GcnGradleBuild.java index 89304d3..ea8c069 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/GcnGradleBuild.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/GcnGradleBuild.java @@ -33,6 +33,12 @@ public class GcnGradleBuild extends GradleBuild { private final List repositories; + /** + * @param gradleDsl Gradle DSL + * @param dependencies dependencies + * @param plugins plugins + * @param repositories repos + */ public GcnGradleBuild(@NonNull GradleDsl gradleDsl, @NonNull List dependencies, @NonNull List plugins, diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/GcnMavenBuild.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/GcnMavenBuild.java index 058113e..64fb713 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/GcnMavenBuild.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/GcnMavenBuild.java @@ -17,7 +17,7 @@ import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.build.Property; -import io.micronaut.starter.build.dependencies.Coordinate; +import io.micronaut.starter.build.dependencies.DependencyCoordinate; import io.micronaut.starter.build.maven.MavenBuild; import io.micronaut.starter.build.maven.MavenCombineAttribute; import io.micronaut.starter.build.maven.MavenDependency; @@ -37,18 +37,31 @@ public class GcnMavenBuild extends MavenBuild { private final List repositories; + /** + * @param artifactId artifact ID + * @param annotationProcessors annotation processors + * @param testAnnotationProcessors test annotation processors + * @param dependencies dependencies + * @param properties properties + * @param plugins plugins + * @param repositories repos + * @param annotationProcessorCombineAttribute MavenCombineAttribute for annotation processors + * @param testAnnotationProcessorCombineAttribute MavenCombineAttribute for test annotation processors + * @param profiles profiles + */ public GcnMavenBuild(String artifactId, - List annotationProcessors, - List testAnnotationProcessors, + List annotationProcessors, + List testAnnotationProcessors, List dependencies, List properties, List plugins, List repositories, MavenCombineAttribute annotationProcessorCombineAttribute, MavenCombineAttribute testAnnotationProcessorCombineAttribute, - Collection profiles) { + Collection profiles, + List aotDependencies) { super(artifactId, annotationProcessors, testAnnotationProcessors, dependencies, properties, plugins, - repositories, annotationProcessorCombineAttribute, testAnnotationProcessorCombineAttribute, profiles); + repositories, annotationProcessorCombineAttribute, testAnnotationProcessorCombineAttribute, profiles, aotDependencies); this.repositories = repositories; } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/MavenProjectDependency.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/MavenProjectDependency.java index 2678c38..c268049 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/MavenProjectDependency.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/buildtool/MavenProjectDependency.java @@ -17,6 +17,7 @@ import io.micronaut.starter.build.dependencies.Dependency; import io.micronaut.starter.build.maven.MavenDependency; +import io.micronaut.starter.options.Language; /** * Renders a project dependency in a Maven build. @@ -29,12 +30,13 @@ public class MavenProjectDependency extends MavenDependency { * @param groupId group id * @param projectName project name (used as artifact id) */ - public MavenProjectDependency(String groupId, String projectName) { + public MavenProjectDependency(String groupId, String projectName, Language language) { super(Dependency.builder() - .groupId(groupId) - .artifactId(projectName) - .version("1.0-SNAPSHOT") - .compile() - .build()); + .groupId(groupId) + .artifactId(projectName) + .version("1.0-SNAPSHOT") + .compile() + .build(), + language); } } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnBom.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnBom.java index a23683c..2c9baa4 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnBom.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnBom.java @@ -15,9 +15,12 @@ */ package cloud.graal.gcn.feature; +import cloud.graal.gcn.feature.create.GcnRepository; import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.application.ApplicationType; import io.micronaut.starter.application.generator.GeneratorContext; +import io.micronaut.starter.build.Repository; +import io.micronaut.starter.build.RequiresRepository; import io.micronaut.starter.build.dependencies.Dependency; import io.micronaut.starter.build.gradle.GradlePlugin; import io.micronaut.starter.feature.DefaultFeature; @@ -25,6 +28,7 @@ import io.micronaut.starter.options.Options; import jakarta.inject.Singleton; +import java.util.List; import java.util.Set; /** @@ -33,12 +37,13 @@ * @since 1.0.0 */ @Singleton -public class GcnBom implements DefaultFeature { +public class GcnBom implements DefaultFeature, RequiresRepository { private static final Dependency BOM = Dependency.builder() .groupId("cloud.graal.gcn") .artifactId("gcn-bom") - .version("1.0") + .version("2.0") + //.version("2.0") .pom() .compile() .build(); @@ -74,4 +79,9 @@ public boolean supports(ApplicationType applicationType) { public boolean isVisible() { return false; } + + @Override + public @NonNull List getRepositories() { + return List.of(new GcnRepository()); + } } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnFeatureContext.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnFeatureContext.java index 8d104cb..54e1602 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnFeatureContext.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnFeatureContext.java @@ -25,6 +25,7 @@ import io.micronaut.starter.feature.FeaturePredicate; import io.micronaut.starter.feature.build.BuildFeature; import io.micronaut.starter.feature.database.DatabaseDriverFeature; +import io.micronaut.starter.feature.lang.LanguageFeature; import io.micronaut.starter.io.ConsoleOutput; import io.micronaut.starter.options.Options; @@ -105,7 +106,7 @@ private void processSelectedFeatures(GcnCloud cloud) { features.addAll(selectedAndDefaultFeatures.stream() .filter(f -> { - if (f instanceof BuildFeature || f instanceof DatabaseDriverFeature) { + if (f instanceof BuildFeature || f instanceof DatabaseDriverFeature || f instanceof LanguageFeature) { return true; } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnFeatures.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnFeatures.java index 8128cfe..405f901 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnFeatures.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnFeatures.java @@ -28,8 +28,8 @@ */ public class GcnFeatures extends Features { - /** pre-computed main class name. */ private final GcnGeneratorContext context; + /** pre-computed main class name. */ private String mainClassName; private boolean mainClassNameSet; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnTestedFeatures.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnTestedFeatures.java index 1122858..836ec5d 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnTestedFeatures.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/GcnTestedFeatures.java @@ -25,10 +25,12 @@ */ public final class GcnTestedFeatures { + /** + * Names of tested features. + */ public static final Set TESTED_FEATURE_NAMES = Set.of( // COMMON "graalvm", - "http-client", "reactor", "test-resources", // SECURITY @@ -90,10 +92,7 @@ public final class GcnTestedFeatures { "tracing-opentelemetry-xray", // TRACING GCP "tracing-opentelemetry-exporter-gcp", - "tracing-opentelemetry-gcp", - // TRACING OCI - "tracing-opentelemetry-zipkin", - "tracing-opentelemetry-exporter-zipkin" + "tracing-opentelemetry-gcp" ); private GcnTestedFeatures() { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/License.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/License.java index 5f63f6c..11f643a 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/License.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/License.java @@ -31,8 +31,8 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import static cloud.graal.gcn.feature.License.PomLicensePostProcessor.PATTERN_GRADLE; import static cloud.graal.gcn.feature.License.PomLicensePostProcessor.PATTERN_POM; +import static cloud.graal.gcn.feature.License.SrcLicensePostProcessor.PATTERN_GRADLE; import static cloud.graal.gcn.feature.License.SrcLicensePostProcessor.PATTERN_SRC; import static io.micronaut.starter.template.Template.ROOT; @@ -97,10 +97,19 @@ public boolean isVisible() { return false; } + /** + * Post-processor for pom.xml files. + */ public static class PomLicensePostProcessor implements TemplatePostProcessor { + /** + * The singleton instance. + */ public static final PomLicensePostProcessor INSTANCE = new PomLicensePostProcessor(); - public static final Pattern PATTERN_GRADLE = Pattern.compile(".+\\.gradle"); + + /** + * Regex for pom.xml files. + */ public static final Pattern PATTERN_POM = Pattern.compile(".*pom\\.xml"); private static final String PROJECT_START = " " * " + line) diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/AbstractGcnCreateFeature.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/AbstractGcnCreateFeature.java index 480ec12..26d1c87 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/AbstractGcnCreateFeature.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/AbstractGcnCreateFeature.java @@ -24,18 +24,23 @@ import cloud.graal.gcn.model.GcnCloud; import cloud.graal.gcn.model.GcnProjectType; import cloud.graal.gcn.template.BuildGradlePostProcessor; -import cloud.graal.gcn.template.GcnYamlTemplate; +import cloud.graal.gcn.template.GcnPropertiesTemplate; +import cloud.graal.gcn.template.MavenPlatformPostProcessor; import cloud.graal.gcn.template.MavenPomPostProcessor; import io.micronaut.core.annotation.NonNull; +import io.micronaut.core.order.OrderUtil; import io.micronaut.starter.application.Project; import io.micronaut.starter.build.BuildPlugin; import io.micronaut.starter.build.Repository; +import io.micronaut.starter.build.RepositoryResolver; import io.micronaut.starter.build.gradle.GradleBuild; import io.micronaut.starter.build.gradle.GradleDependency; import io.micronaut.starter.build.gradle.GradleDsl; import io.micronaut.starter.build.gradle.GradlePlugin; import io.micronaut.starter.build.gradle.GradleRepository; +import io.micronaut.starter.build.maven.JvmArgumentsFeature; import io.micronaut.starter.build.maven.MavenBuild; +import io.micronaut.starter.build.maven.MavenRepository; import io.micronaut.starter.feature.Features; import io.micronaut.starter.feature.build.gradle.MicronautApplicationGradlePlugin; import io.micronaut.starter.feature.build.gradle.templates.buildGradle; @@ -96,6 +101,7 @@ public abstract class AbstractGcnCreateFeature extends AbstractGcnFeature { // at app//io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2367) private GcnGradleBuildCreator gradleBuildCreator; private GcnMavenBuildCreator mavenBuildCreator; + private RepositoryResolver repositoryResolver; /** * Temporary dependency injection method for GradleBuildCreator. @@ -117,19 +123,24 @@ public void setMavenBuildCreator(GcnMavenBuildCreator mavenBuildCreator) { this.mavenBuildCreator = mavenBuildCreator; } + @Inject + public void setRepositoryResolver(RepositoryResolver repositoryResolver) { + this.repositoryResolver = repositoryResolver; + } + @Override public void apply(GcnGeneratorContext generatorContext) { if (generatorContext.getApplicationType() != FUNCTION) { createApplicationClass(generatorContext); } - createApplicationCloudYml(generatorContext); - createExtraCloudConfigYml(generatorContext); + createApplicationCloudProperties(generatorContext); + createExtraCloudConfigProperties(generatorContext); if (generatorContext.getBuildTool().isGradle()) { addGradleBuild(generatorContext); } else { - addMavenBuild(generatorContext); + addMavenBuild(generatorContext, repositoryResolver.resolveRepositories(generatorContext)); } } @@ -154,18 +165,18 @@ private void createApplicationClass(GcnGeneratorContext generatorContext) { koTest.template(project, transactional)); } - private void createApplicationCloudYml(GcnGeneratorContext generatorContext) { + private void createApplicationCloudProperties(GcnGeneratorContext generatorContext) { - generatorContext.addTemplate("application-yml-" + getModuleName(), - new GcnYamlTemplate( + generatorContext.addTemplate("application-properties-" + getModuleName(), + new GcnPropertiesTemplate( getModuleName(), - "src/main/resources/application" + getCloud().getEnvironmentNameSuffix() + ".yml", + "src/main/resources/application" + getCloud().getEnvironmentNameSuffix() + ".properties", generatorContext.getConfiguration(getCloud()))); - generatorContext.addTemplate("bootstrap-yml-" + getModuleName(), - new GcnYamlTemplate( + generatorContext.addTemplate("bootstrap-properties-" + getModuleName(), + new GcnPropertiesTemplate( getModuleName(), - "src/main/resources/bootstrap" + getCloud().getEnvironmentNameSuffix() + ".yml", + "src/main/resources/bootstrap" + getCloud().getEnvironmentNameSuffix() + ".properties", generatorContext.getBootstrapConfiguration(getCloud()))); } @@ -174,15 +185,24 @@ private void addGradleBuild(GcnGeneratorContext generatorContext) { List dependencies = GradleDependency.listOf(generatorContext, USE_GRADLE_VERSION_CATALOG); dependencies.add(new GradleProjectDependency(LIB_MODULE, generatorContext)); + List repositories = repositoryResolver.resolveRepositories(generatorContext); + if (generatorContext.getFeatures().language().isGroovy() || generatorContext.getFeatures().testFramework().isSpock()) { generatorContext.addBuildPlugin(GROOVY_PLUGIN); } - List repositories = Repository.micronautRepositories(); GradleBuild original = gradleBuildCreator.create(generatorContext, repositories, USE_GRADLE_VERSION_CATALOG); List copiedPlugins = new ArrayList<>(); - for (BuildPlugin p : generatorContext.getBuildPlugins()) { + + List plugins = generatorContext.getBuildPlugins() + .stream() + .filter(GradlePlugin.class::isInstance) + .map(GradlePlugin.class::cast) + .sorted(OrderUtil.COMPARATOR) + .toList(); + + for (BuildPlugin p : plugins) { GradlePlugin plugin = (GradlePlugin) p; if (plugin.getExtension() == null && plugin.getSettingsExtension() == null) { // ok to reuse since it has no Rocker templates @@ -211,10 +231,10 @@ private void addGradleBuild(GcnGeneratorContext generatorContext) { generatorContext.getFeatures(getCloud()), build) )); - generatorContext.addPostProcessor(templateKey, new BuildGradlePostProcessor(dsl, true)); + generatorContext.addPostProcessor(templateKey, new BuildGradlePostProcessor(dsl, true, generatorContext.getFeature(AbstractGcnCloudGatewayFunction.class).orElse(null) != null, generatorContext.getApplicationType())); // for lib/build.gradle - generatorContext.addPostProcessor("build", new BuildGradlePostProcessor(dsl, false)); + generatorContext.addPostProcessor("build", new BuildGradlePostProcessor(dsl, false, generatorContext.getFeature(AbstractGcnCloudGatewayFunction.class).orElse(null) != null, generatorContext.getApplicationType())); } private GradlePlugin cloneMicronautPlugin(GradlePlugin plugin, @@ -240,20 +260,22 @@ private GradlePlugin cloneMicronautPlugin(GradlePlugin plugin, extensionModel.incremental(), generatorContext.getProject().getPackageName(), extensionModel.additionalTestResourceModules(), - extensionModel.sharedTestResources())), + extensionModel.sharedTestResources(), + extensionModel.aotKeys(), + extensionModel.lambdaRuntimeMainClass())), null, - false, + plugin.getPluginsManagementRepositories(), false, plugin.getOrder(), plugin.getBuildImports()); } - private void addMavenBuild(GcnGeneratorContext generatorContext) { + private void addMavenBuild(GcnGeneratorContext generatorContext, List repositories) { - MavenBuild mavenBuild = mavenBuildCreator.create(generatorContext); + MavenBuild mavenBuild = mavenBuildCreator.create(generatorContext, repositories); mavenBuild.getDependencies().add(new MavenProjectDependency( - generatorContext.getProject().getPackageName(), LIB_MODULE)); + generatorContext.getProject().getPackageName(), LIB_MODULE, generatorContext.getLanguage())); String templateKey = "mavenPom-" + getModuleName(); generatorContext.addTemplate(templateKey, new RockerTemplate(getModuleName(), "pom.xml", @@ -261,7 +283,8 @@ private void addMavenBuild(GcnGeneratorContext generatorContext) { generatorContext.getApplicationType(), generatorContext.getProject(), generatorContext.getFeatures(), - mavenBuild) + mavenBuild, + JvmArgumentsFeature.getJvmArguments(generatorContext.getFeatures().getFeatures())) )); generatorContext.addPostProcessor(templateKey, new MavenPomPostProcessor( generatorContext.getLibProject().getName(), @@ -272,11 +295,13 @@ private void addMavenBuild(GcnGeneratorContext generatorContext) { // this is called for each cloud, but the templates are stored in a Map, so it's idempotent generatorContext.addTemplate("multi-module-pom", new RockerTemplate(ROOT, generatorContext.getBuildTool().getBuildFileName(), - multimodule.template(null, + multimodule.template(MavenRepository.listOf(repositoryResolver.resolveRepositories(generatorContext)), generatorContext.getLibProject(), generatorContext.getModuleNames()) )); + generatorContext.addPostProcessor("multi-module-pom", new MavenPlatformPostProcessor()); + // this is called for each cloud, but the post processors are stored in a Set, so it's idempotent generatorContext.addPostProcessor("mavenPom", new MavenPomPostProcessor( generatorContext.getLibProject().getName(), @@ -286,12 +311,12 @@ private void addMavenBuild(GcnGeneratorContext generatorContext) { true)); } - private void createExtraCloudConfigYml(GcnGeneratorContext generatorContext) { + private void createExtraCloudConfigProperties(GcnGeneratorContext generatorContext) { for (Map.Entry> e : generatorContext.getExtraConfigurations().entrySet()) { GcnCloud cloud = e.getKey(); for (Configuration c : e.getValue()) { generatorContext.addTemplate(c.getTemplateKey() + '-' + cloud.getModuleName(), - new GcnYamlTemplate(cloud.getModuleName(), c.getFullPath("yml"), c)); + new GcnPropertiesTemplate(cloud.getModuleName(), c.getFullPath("properties"), c)); } } } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/GcnGradleBuildCreator.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/GcnGradleBuildCreator.java index 35fef2f..49d03c0 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/GcnGradleBuildCreator.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/GcnGradleBuildCreator.java @@ -24,8 +24,8 @@ import io.micronaut.starter.build.gradle.GradleBuildCreator; import io.micronaut.starter.build.gradle.GradlePlugin; import io.micronaut.starter.build.gradle.GradleRepository; +import jakarta.inject.Singleton; -import javax.inject.Singleton; import java.util.List; import java.util.stream.Collectors; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/GcnMavenBuildCreator.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/GcnMavenBuildCreator.java index 82fe45d..1e566e3 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/GcnMavenBuildCreator.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/GcnMavenBuildCreator.java @@ -20,11 +20,14 @@ import io.micronaut.core.order.OrderUtil; import io.micronaut.starter.application.generator.GeneratorContext; import io.micronaut.starter.build.Repository; -import io.micronaut.starter.build.dependencies.Coordinate; +import io.micronaut.starter.build.dependencies.DependencyCoordinate; +import io.micronaut.starter.build.dependencies.Scope; import io.micronaut.starter.build.maven.MavenBuild; import io.micronaut.starter.build.maven.MavenBuildCreator; import io.micronaut.starter.build.maven.MavenPlugin; import io.micronaut.starter.build.maven.MavenRepository; +import io.micronaut.starter.feature.build.maven.templates.mavenPlugin; +import io.micronaut.starter.template.RockerWritable; import jakarta.inject.Singleton; import java.util.ArrayList; @@ -32,7 +35,6 @@ import java.util.List; import java.util.stream.Collectors; -import static io.micronaut.starter.build.Repository.micronautRepositories; /** * Extends MavenBuildCreator to add the Oracle Maven repo. @@ -44,13 +46,14 @@ public class GcnMavenBuildCreator extends MavenBuildCreator { @NonNull @Override - public MavenBuild create(GeneratorContext generatorContext) { - MavenBuild build = super.create(generatorContext); + public MavenBuild create(GeneratorContext generatorContext, List repositories) { + + MavenBuild build = super.create(generatorContext, repositories); List plugins = generatorContext.getBuildPlugins() .stream() .filter(MavenPlugin.class::isInstance) - .map(MavenPlugin.class::cast) + .map(plugin -> cloneMicronautPlugin((MavenPlugin) plugin)) .sorted(OrderUtil.COMPARATOR) .collect(Collectors.toList()); @@ -61,21 +64,23 @@ public MavenBuild create(GeneratorContext generatorContext) { build.getDependencies(), build.getProperties(), plugins, - getRepositories(), + MavenRepository.listOf(repositories), build.getAnnotationProcessorCombineAttribute(), build.getTestAnnotationProcessorCombineAttribute(), - build.getProfiles()); + build.getProfiles(), + generatorContext.getDependencies().stream().filter(dep -> dep.getScope() == Scope.AOT_PLUGIN).map(DependencyCoordinate::new).toList()); } - @NonNull - @Override - protected List getRepositories() { - List repositories = micronautRepositories(); - repositories.add(0, new GcnRepository()); - return MavenRepository.listOf(repositories); + private List deduplicate(List annotationProcessors) { + return new ArrayList<>(new LinkedHashSet<>(annotationProcessors)); } - private List deduplicate(List annotationProcessors) { - return new ArrayList<>(new LinkedHashSet<>(annotationProcessors)); + private MavenPlugin cloneMicronautPlugin(MavenPlugin plugin) { + mavenPlugin extensionModel = (mavenPlugin) ((RockerWritable) plugin.getExtension()).getModel(); + return new MavenPlugin( + plugin.getArtifactId(), + new RockerWritable(mavenPlugin.template( + extensionModel.groupId(), + extensionModel.artifactId())), 0); } } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/PlatformIndependent.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/PlatformIndependent.java index d5a635a..b293443 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/PlatformIndependent.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/PlatformIndependent.java @@ -17,9 +17,11 @@ import cloud.graal.gcn.GcnGeneratorContext; import cloud.graal.gcn.feature.AbstractGcnFeature; +import cloud.graal.gcn.feature.create.gatewayfunction.AbstractGcnCloudGatewayFunction; import cloud.graal.gcn.model.GcnCloud; import cloud.graal.gcn.template.BuildGradlePostProcessor; import cloud.graal.gcn.template.LogbackXmlPostProcessor; +import cloud.graal.gcn.template.MavenPlatformPostProcessor; import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.build.gradle.GradleDsl; import jakarta.inject.Singleton; @@ -43,8 +45,9 @@ public class PlatformIndependent extends AbstractGcnFeature { @Override public void apply(GcnGeneratorContext generatorContext) { GradleDsl dsl = generatorContext.getBuildTool().getGradleDsl().orElse(GROOVY); - generatorContext.addPostProcessor("build", new BuildGradlePostProcessor(dsl, false)); + generatorContext.addPostProcessor("build", new BuildGradlePostProcessor(dsl, false, generatorContext.getFeature(AbstractGcnCloudGatewayFunction.class).orElse(null) != null, generatorContext.getApplicationType())); generatorContext.addPostProcessor("loggingConfig", new LogbackXmlPostProcessor()); + generatorContext.addPostProcessor("mavenPom", new MavenPlatformPostProcessor()); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/gatewayfunction/GcnAwsCloudGatewayFunction.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/gatewayfunction/GcnAwsCloudGatewayFunction.java index 8f3476f..1d161cf 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/gatewayfunction/GcnAwsCloudGatewayFunction.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/gatewayfunction/GcnAwsCloudGatewayFunction.java @@ -15,12 +15,14 @@ */ package cloud.graal.gcn.feature.create.gatewayfunction; +import cloud.graal.gcn.GcnGeneratorContext; import cloud.graal.gcn.feature.GcnFeatureContext; import cloud.graal.gcn.feature.replaced.GcnAwsLambda; import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.feature.aws.AmazonApiGateway; import io.micronaut.starter.feature.function.awslambda.AwsLambda; +import io.micronaut.starter.feature.json.SerializationJacksonFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.AWS; @@ -35,23 +37,50 @@ public class GcnAwsCloudGatewayFunction extends AbstractGcnCloudGatewayFunction private final AmazonApiGateway amazonApiGateway; private final GcnAwsLambda awsLambda; + private final SerializationJacksonFeature serializationJacksonFeature; /** - * @param amazonApiGateway AmazonApiGateway feature - * @param awsLambda GcnAwsLambda feature + * @param amazonApiGateway AmazonApiGateway feature + * @param awsLambda GcnAwsLambda feature + * @param serializationJacksonFeature serialisation Jackson feature */ public GcnAwsCloudGatewayFunction(AmazonApiGateway amazonApiGateway, - GcnAwsLambda awsLambda) { + GcnAwsLambda awsLambda, + SerializationJacksonFeature serializationJacksonFeature) { this.amazonApiGateway = amazonApiGateway; this.awsLambda = awsLambda; + this.serializationJacksonFeature = serializationJacksonFeature; } @Override public void processSelectedFeatures(GcnFeatureContext featureContext) { + featureContext.addFeature(serializationJacksonFeature, SerializationJacksonFeature.class); featureContext.addFeature(awsLambda, AwsLambda.class); featureContext.addFeature(amazonApiGateway, AmazonApiGateway.class); } + @Override + public void apply(GcnGeneratorContext generatorContext) { + super.apply(generatorContext); + applyForLib(generatorContext, () -> { + serializationJacksonFeature.apply(generatorContext); + }); + } + + protected void applyForLib(GcnGeneratorContext generatorContext, + Runnable runnable) { + + GcnCloud cloud = generatorContext.getCloud(); + + generatorContext.resetCloud(); + + try { + runnable.run(); + } finally { + generatorContext.setCloud(cloud); + } + } + @NonNull @Override public GcnCloud getCloud() { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/gatewayfunction/GcnGcpCloudGatewayFunction.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/gatewayfunction/GcnGcpCloudGatewayFunction.java index 33a6bff..b03c576 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/gatewayfunction/GcnGcpCloudGatewayFunction.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/create/gatewayfunction/GcnGcpCloudGatewayFunction.java @@ -15,8 +15,10 @@ */ package cloud.graal.gcn.feature.create.gatewayfunction; +import cloud.graal.gcn.feature.GcnFeatureContext; import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.feature.function.gcp.GoogleCloudRawFunction; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.GCP; @@ -29,6 +31,20 @@ @Singleton public class GcnGcpCloudGatewayFunction extends AbstractGcnCloudGatewayFunction { + private final GoogleCloudRawFunction googleCloudFunction; + + /** + * @param googleCloudFunction {@link GoogleCloudRawFunction} feature + */ + public GcnGcpCloudGatewayFunction(GoogleCloudRawFunction googleCloudFunction) { + this.googleCloudFunction = googleCloudFunction; + } + + @Override + public void processSelectedFeatures(GcnFeatureContext featureContext) { + featureContext.addFeature(googleCloudFunction, GoogleCloudRawFunction.class); + } + @NonNull @Override public GcnCloud getCloud() { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnAwsLambda.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnAwsLambda.java index 19767e0..0ba88e7 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnAwsLambda.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnAwsLambda.java @@ -18,8 +18,14 @@ import cloud.graal.gcn.GcnGeneratorContext; import io.micronaut.context.annotation.Replaces; import io.micronaut.starter.application.generator.GeneratorContext; +import io.micronaut.starter.feature.architecture.X86; +import io.micronaut.starter.feature.aws.AwsLambdaEventsSerde; +import io.micronaut.starter.feature.aws.AwsLambdaSnapstart; import io.micronaut.starter.feature.awslambdacustomruntime.AwsLambdaCustomRuntime; import io.micronaut.starter.feature.function.awslambda.AwsLambda; +import io.micronaut.starter.feature.function.awslambda.DefaultAwsLambdaHandlerProvider; +import io.micronaut.starter.feature.function.awslambda.FunctionAwsLambdaHandlerProvider; +import io.micronaut.starter.feature.other.HttpClient; import io.micronaut.starter.feature.other.ShadePlugin; import jakarta.inject.Singleton; @@ -40,8 +46,14 @@ public class GcnAwsLambda extends AwsLambda { * @param customRuntime AwsLambdaCustomRuntime feature */ public GcnAwsLambda(ShadePlugin shadePlugin, - AwsLambdaCustomRuntime customRuntime) { - super(shadePlugin, customRuntime); + AwsLambdaCustomRuntime customRuntime, + X86 x86, + AwsLambdaSnapstart snapstart, + HttpClient httpClient, + AwsLambdaEventsSerde awsLambdaEventsSerde, + DefaultAwsLambdaHandlerProvider defaultAwsLambdaHandlerProvider, + FunctionAwsLambdaHandlerProvider functionAwsLambdaHandlerProvider) { + super(shadePlugin, customRuntime, x86, snapstart, httpClient, awsLambdaEventsSerde, defaultAwsLambdaHandlerProvider, functionAwsLambdaHandlerProvider); } @Override @@ -50,4 +62,5 @@ public void apply(GeneratorContext generatorContext) { super.apply(generatorContext); } } + } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnGradle.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnGradle.java index 78a8fc5..405b0e9 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnGradle.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnGradle.java @@ -18,7 +18,6 @@ import cloud.graal.gcn.GcnGeneratorContext; import cloud.graal.gcn.buildtool.GcnGradleBuild; import cloud.graal.gcn.feature.create.GcnGradleBuildCreator; -import cloud.graal.gcn.feature.create.GcnRepository; import cloud.graal.gcn.feature.create.template.BuildSrcBuildGradle; import cloud.graal.gcn.feature.create.template.EnforceVersionsGroovy; import cloud.graal.gcn.feature.create.template.EnforceVersionsKotlin; @@ -28,18 +27,15 @@ import io.micronaut.context.annotation.Replaces; import io.micronaut.starter.application.generator.GeneratorContext; import io.micronaut.starter.build.Repository; +import io.micronaut.starter.build.RepositoryResolver; import io.micronaut.starter.build.dependencies.CoordinateResolver; import io.micronaut.starter.build.gradle.GradleBuild; import io.micronaut.starter.build.gradle.GradleDsl; import io.micronaut.starter.build.gradle.GradlePlugin; import io.micronaut.starter.build.gradle.GradleRepository; -import io.micronaut.starter.feature.build.KotlinBuildPlugins; -import io.micronaut.starter.feature.build.MicronautBuildPlugin; import io.micronaut.starter.feature.build.gradle.Gradle; -import io.micronaut.starter.template.BinaryTemplate; import io.micronaut.starter.template.RockerTemplate; import io.micronaut.starter.template.RockerWritable; -import io.micronaut.starter.template.URLTemplate; import jakarta.inject.Singleton; import java.util.ArrayList; @@ -47,7 +43,6 @@ import java.util.Optional; import static cloud.graal.gcn.GcnGeneratorContext.PLUGIN_SHADOW; -import static io.micronaut.starter.build.Repository.micronautRepositories; import static io.micronaut.starter.build.gradle.GradleDsl.GROOVY; import static io.micronaut.starter.build.gradle.GradleDsl.KOTLIN; import static io.micronaut.starter.feature.build.gradle.MicronautApplicationGradlePlugin.Builder.APPLICATION; @@ -63,25 +58,24 @@ @Singleton public class GcnGradle extends Gradle { - private static final String PLUGIN_TEST_RESOURCES = "io.micronaut.test-resources"; private static final String ARTIFACT_ID = "micronaut-gradle-plugin"; - private static final String GCN_WRAPPER_JAR = WRAPPER_JAR.replaceFirst("gradle/", "gcn_gradle/"); - private static final String GCN_WRAPPER_PROPS = WRAPPER_PROPS.replaceFirst("gradle/", "gcn_gradle/"); + private static final String PLUGIN_TEST_RESOURCES = "io.micronaut.test-resources"; private final CoordinateResolver coordinateResolver; + private final RepositoryResolver repositoryResolver; + /** - * @param gradleBuildCreator GradleBuildCreator bean - * @param micronautBuildPlugin MicronautBuildPlugin feature - * @param kotlinBuildPlugins KotlinBuildPlugins feature - * @param coordinateResolver CoordinateResolver bean + * @param gradleBuildCreator GradleBuildCreator bean + * @param coordinateResolver CoordinateResolver bean + * @param repositoryResolver RepositoryResolver bean */ public GcnGradle(GcnGradleBuildCreator gradleBuildCreator, - MicronautBuildPlugin micronautBuildPlugin, - KotlinBuildPlugins kotlinBuildPlugins, - CoordinateResolver coordinateResolver) { - super(gradleBuildCreator, micronautBuildPlugin, kotlinBuildPlugins); + CoordinateResolver coordinateResolver, + RepositoryResolver repositoryResolver) { + super(gradleBuildCreator, repositoryResolver); this.coordinateResolver = coordinateResolver; + this.repositoryResolver = repositoryResolver; } @Override @@ -104,8 +98,7 @@ protected GradleBuild createBuild(GeneratorContext gc) { GcnGeneratorContext generatorContext = (GcnGeneratorContext) gc; - List repositories = micronautRepositories(); - repositories.add(0, new GcnRepository()); + List repositories = repositoryResolver.resolveRepositories(gc); addBuildSrc(generatorContext); @@ -141,6 +134,12 @@ protected GradleBuild createBuild(GeneratorContext gc) { original.getDependencies(), plugins, gradleRepositories); } + // don't delete - this is needed for web image generation + @Override + protected void addGradleInitFiles(GeneratorContext generatorContext) { + super.addGradleInitFiles(generatorContext); + } + private void addBuildSrc(GcnGeneratorContext generatorContext) { GradleDsl dsl = generatorContext @@ -159,18 +158,6 @@ private void addBuildSrc(GcnGeneratorContext generatorContext) { kotlin ? EnforceVersionsKotlin.template() : EnforceVersionsGroovy.template())); } - // TODO this override is here to upgrade Gradle to v7.6 to add support for JDK 19; - // remove this and the resource files when we've upgrade to a version of Micronaut - // that uses Gradle 7.6+ - @Override - protected void addGradleInitFiles(GeneratorContext generatorContext) { - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - generatorContext.addTemplate("gradleWrapperJar", new BinaryTemplate(ROOT, WRAPPER_JAR, classLoader.getResource(GCN_WRAPPER_JAR))); - generatorContext.addTemplate("gradleWrapperProperties", new URLTemplate(ROOT, WRAPPER_PROPS, classLoader.getResource(GCN_WRAPPER_PROPS))); - generatorContext.addTemplate("gradleWrapper", new URLTemplate(ROOT, "gradlew", classLoader.getResource("gcn_gradle/gradlew"), true)); - generatorContext.addTemplate("gradleWrapperBat", new URLTemplate(ROOT, "gradlew.bat", classLoader.getResource("gcn_gradle/gradlew.bat"), false)); - } - private Optional resolveTestRuntime(GeneratorContext generatorContext) { if (generatorContext.getFeatures().testFramework().isJunit()) { return Optional.of("junit5"); diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnHttpClient.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnHttpClient.java new file mode 100644 index 0000000..2c98058 --- /dev/null +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnHttpClient.java @@ -0,0 +1,52 @@ +/* + * Copyright 2023 Oracle and/or its affiliates + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cloud.graal.gcn.feature.replaced; + +import cloud.graal.gcn.feature.GcnFeature; +import io.micronaut.context.annotation.Replaces; +import io.micronaut.starter.application.ApplicationType; +import io.micronaut.starter.feature.DefaultFeature; +import io.micronaut.starter.feature.Feature; +import io.micronaut.starter.feature.FeatureContext; +import io.micronaut.starter.feature.other.HttpClient; +import io.micronaut.starter.feature.other.HttpClientTest; +import io.micronaut.starter.options.Options; +import jakarta.inject.Singleton; + +import java.util.Set; + +/** + * Replaces the default feature to make it a default feature, and exclude HttpClientTest. + * + * @since 4.0 + */ +@Replaces(HttpClient.class) +@Singleton +public class GcnHttpClient extends HttpClient implements DefaultFeature { + + private static final String HTTP_CLIENT_TEST_NAME = new HttpClientTest().getName(); + + @Override + public boolean shouldApply(ApplicationType applicationType, Options options, Set selectedFeatures) { + return selectedFeatures.stream().anyMatch(GcnFeature.class::isInstance); + } + + @Override + public void processSelectedFeatures(FeatureContext featureContext) { + super.processSelectedFeatures(featureContext); + featureContext.exclude(x -> x.getName().equals(HTTP_CLIENT_TEST_NAME)); + } +} diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnKoTest.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnKoTest.java index fe8c968..bb9f2e2 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnKoTest.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnKoTest.java @@ -35,9 +35,17 @@ @Singleton public class GcnKoTest extends KoTest { - // mirrored from base class for the UI + /** + * ARTIFACT_ID_KOTEST_RUNNER_JUNIT_5_JVM mirrored from base class for the UI. + */ protected static final String ARTIFACT_ID_KOTEST_RUNNER_JUNIT_5_JVM = KoTest.ARTIFACT_ID_KOTEST_RUNNER_JUNIT_5_JVM; + /** + * ARTIFACT_ID_KOTEST_ASSERTIONS_CORE_JVM mirrored from base class for the UI. + */ protected static final String ARTIFACT_ID_KOTEST_ASSERTIONS_CORE_JVM = KoTest.ARTIFACT_ID_KOTEST_ASSERTIONS_CORE_JVM; + /** + * ARTIFACT_ID_KOTEST_ASSERTIONS_CORE_JVM mirrored from base class for the UI. + */ protected static final Dependency DEPENDENCY_MICRONAUT_TEST_KOTEST = KoTest.DEPENDENCY_MICRONAUT_TEST_KOTEST; @Override @@ -51,9 +59,9 @@ public void doApply(GeneratorContext generatorContext) { // Note: GcnCloud.NONE here would be if a user selected a feature or a service but no cloud context.addUrlTemplate(cloud.getModuleName(), - "koTestConfig" + cloud.getEnvironmentNameSuffix() + cloud.getModuleName(), - "src/test/kotlin/io/kotest/provided/ProjectConfig.kt", - "kotest/ProjectConfig.kt"); + "koTestConfig" + cloud.getEnvironmentNameSuffix() + cloud.getModuleName(), + "src/test/kotlin/io/kotest/provided/ProjectConfig.kt", + "kotest/ProjectConfig.kt"); // Gradle Plugin applies the KoTest dependencies if (context.getBuildTool() == MAVEN) { @@ -65,10 +73,12 @@ public void doApply(GeneratorContext generatorContext) { .lookupArtifactId(ARTIFACT_ID_KOTEST_ASSERTIONS_CORE_JVM) .test()); } - } else if (context.getBuildTool() == MAVEN) { + } + + if (context.getBuildTool() == MAVEN) { // Micronaut Starter auto adds the 'Mockk' dependency if Maven, Kotlin and KoTest are selected // so remove it from the lib/pom.xml - context.getLibDependencies().removeIf(it -> "mockk".equals(it.getArtifactId())); + context.getDependencies().removeIf(it -> "mockk".equals(it.getArtifactId()) && it.getVersion() == null); } } } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnMaven.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnMaven.java index 0a375c1..a64f767 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnMaven.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnMaven.java @@ -22,6 +22,7 @@ import io.micronaut.context.annotation.Replaces; import io.micronaut.starter.application.generator.GeneratorContext; import io.micronaut.starter.build.Property; +import io.micronaut.starter.build.RepositoryResolver; import io.micronaut.starter.build.maven.MavenBuild; import io.micronaut.starter.feature.build.maven.Maven; import jakarta.inject.Singleton; @@ -44,8 +45,8 @@ public class GcnMaven extends Maven { /** * @param mavenBuildCreator MavenBuildCreator bean */ - public GcnMaven(GcnMavenBuildCreator mavenBuildCreator) { - super(mavenBuildCreator); + public GcnMaven(GcnMavenBuildCreator mavenBuildCreator, RepositoryResolver repositoryResolver) { + super(mavenBuildCreator, repositoryResolver); } @Override diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnMicronautAot.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnMicronautAot.java new file mode 100644 index 0000000..e26bea5 --- /dev/null +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnMicronautAot.java @@ -0,0 +1,38 @@ +/* + * Copyright 2023 Oracle and/or its affiliates + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cloud.graal.gcn.feature.replaced; + +import io.micronaut.context.annotation.Replaces; +import io.micronaut.starter.application.ApplicationType; +import io.micronaut.starter.feature.build.MicronautAot; +import jakarta.inject.Singleton; + +/** + * Replaces the default feature to exclude adding the AOT plugin. + * + * TODO remove this and re-enable the AOT plugin once issues have been resolved. + * + * @since 4.0 + */ +@Singleton +@Replaces(MicronautAot.class) +public class GcnMicronautAot extends MicronautAot { + + @Override + public boolean supports(ApplicationType applicationType) { + return false; + } +} diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudMicrometer.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudMicrometer.java index 06b01d2..8df69c8 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudMicrometer.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudMicrometer.java @@ -23,10 +23,19 @@ import io.micronaut.starter.feature.other.Management; import jakarta.inject.Singleton; +/** + * Replaces the default feature to also add Oracle Cloud Netty dependencies. + * + * @since 1.0.0 + */ @Replaces(OracleCloud.class) @Singleton public class GcnOracleCloudMicrometer extends OracleCloud implements OracleCloudNettyClientDependencies { + /** + * @param core Core feature + * @param management Management feature + */ public GcnOracleCloudMicrometer(Core core, Management management) { super(core, management); } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudSdk.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudSdk.java index c564a41..ea0bd24 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudSdk.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudSdk.java @@ -21,6 +21,11 @@ import io.micronaut.starter.feature.oraclecloud.OracleCloudSdk; import jakarta.inject.Singleton; +/** + * Replaces the default feature to also add Oracle Cloud Netty dependencies. + * + * @since 1.0.0 + */ @Replaces(OracleCloudSdk.class) @Singleton public class GcnOracleCloudSdk extends OracleCloudSdk implements OracleCloudNettyClientDependencies { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudVault.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudVault.java index 2bf5670..be76b0f 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudVault.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnOracleCloudVault.java @@ -21,6 +21,11 @@ import io.micronaut.starter.feature.oraclecloud.OracleCloudVault; import jakarta.inject.Singleton; +/** + * Replaces the default feature to also add Oracle Cloud Netty dependencies. + * + * @since 1.0.0 + */ @Replaces(OracleCloudVault.class) @Singleton public class GcnOracleCloudVault extends OracleCloudVault implements OracleCloudNettyClientDependencies { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnProperties.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnProperties.java new file mode 100644 index 0000000..f9d2350 --- /dev/null +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnProperties.java @@ -0,0 +1,40 @@ +/* + * Copyright 2023 Oracle and/or its affiliates + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cloud.graal.gcn.feature.replaced; + +import cloud.graal.gcn.template.GcnPropertiesTemplate; +import io.micronaut.context.annotation.Replaces; +import io.micronaut.starter.feature.config.Configuration; +import io.micronaut.starter.feature.config.Properties; +import io.micronaut.starter.template.Template; +import jakarta.inject.Singleton; + +import java.util.function.Function; + +/** + * Replaces the default feature to customize properties file writing. + * + * @since 1.0.0 + */ +@Replaces(Properties.class) +@Singleton +public class GcnProperties extends Properties { + + @Override + public Function createTemplate() { + return (config) -> new GcnPropertiesTemplate(config.getFullPath("properties"), config); + } +} diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnYaml.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnYaml.java index 2e9a765..6de0a5b 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnYaml.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/GcnYaml.java @@ -35,6 +35,6 @@ public class GcnYaml extends Yaml { @Override public Function createTemplate() { - return (config) -> new GcnYamlTemplate(config.getFullPath(EXTENSION), config); + return (config) -> new GcnYamlTemplate(config.getFullPath("yml"), config); } } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/template/LibPom.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/template/LibPom.rocker.raw index e18cb1b..4df190e 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/template/LibPom.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/replaced/template/LibPom.rocker.raw @@ -55,13 +55,13 @@ @if (features.language().isGroovy()) { @dependency.template("io.micronaut", "micronaut-inject-groovy", "provided", null, false, null) -@dependency.template("org.codehaus.groovy", "groovy", "compile", "${groovyVersion}", false, null) +@dependency.template("org.apache.groovy", "groovy", "compile", "${groovyVersion}", false, null) @for (processor : mavenBuild.getAnnotationProcessors()) { @dependency.template(processor.getGroupId(), processor.getArtifactId(), "provided", null, false, null) } } @dependency.template("io.micronaut", "micronaut-inject", "compile", null, false, null) -@dependency.template("io.micronaut", "micronaut-validation", "compile", null, false, null) +@dependency.template("io.micronaut.validation", "micronaut-validation", "compile", null, false, null) @if (features.language().isKotlin()) { @dependency.template("com.fasterxml.jackson.module", "jackson-module-kotlin", "runtime", null, false, null) } @@ -243,27 +243,6 @@ } -@if (features.language().isGroovy() || features.testFramework().isSpock()) { - - org.codehaus.gmavenplus - gmavenplus-plugin - 1.13.0 - - - - addSources - generateStubs - compile - removeStubs - addTestSources - generateTestStubs - compileTests - removeTestStubs - - - - -} @if (features.language().isGroovy()) { maven-compiler-plugin diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AbstractDatabaseFeature.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AbstractDatabaseFeature.java index 9c557e9..de21180 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AbstractDatabaseFeature.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AbstractDatabaseFeature.java @@ -52,6 +52,7 @@ import io.micronaut.starter.feature.database.MySQL; import io.micronaut.starter.feature.database.jdbc.JdbcFeature; import io.micronaut.starter.feature.migration.Flyway; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import io.micronaut.starter.template.RockerTemplate; import java.util.LinkedHashMap; @@ -72,6 +73,7 @@ public abstract class AbstractDatabaseFeature extends AbstractGcnServiceFeature private final JdbcFeature jdbcFeature; private final MySQL defaultDriverFeature; private DatabaseDriverFeature driverFeature; + private final MicronautValidationFeature micronautValidationFeature; private boolean applyDriverFeature; /** @@ -85,12 +87,14 @@ protected AbstractDatabaseFeature(Data data, DataJdbc dataJdbc, Flyway flyway, JdbcFeature jdbcFeature, - MySQL defaultDriverFeature) { + MySQL defaultDriverFeature, + MicronautValidationFeature micronautValidationFeature) { this.data = data; this.dataJdbc = dataJdbc; this.flyway = flyway; this.jdbcFeature = jdbcFeature; this.defaultDriverFeature = defaultDriverFeature; + this.micronautValidationFeature = micronautValidationFeature; } @Override @@ -115,6 +119,7 @@ public void processSelectedFeatures(GcnFeatureContext featureContext) { } featureContext.addFeature(flyway, Flyway.class); + featureContext.addFeature(micronautValidationFeature, MicronautValidationFeature.class); // TODO add support for JPA/etc. // TODO what if a user selects JPA or other DataFeature @@ -131,10 +136,9 @@ public final void apply(GcnGeneratorContext generatorContext) { // enabled: true generatorContext.getConfiguration().addNested("flyway.datasources.default.enabled", true); - // set datasource and flyway properties in application-test.yml + // set datasource and flyway properties in application-test.properties Map jdbcConfig = new LinkedHashMap<>(); jdbcConfig.put("flyway.datasources.default.enabled", true); - jdbcConfig.put("datasources.default.schema-generate", "NONE"); jdbcConfig.put("datasources.default.dialect", driverFeature.getDataDialect()); jdbcFeature.applyDefaultConfig(generatorContext, driverFeature, jdbcConfig); generatorContext.getTestConfiguration().addNested(jdbcConfig); @@ -143,6 +147,7 @@ public final void apply(GcnGeneratorContext generatorContext) { data.apply(generatorContext); dataJdbc.apply(generatorContext); jdbcFeature.apply(generatorContext); + micronautValidationFeature.apply(generatorContext); if (applyDriverFeature) { driverFeature.apply(generatorContext); } @@ -236,6 +241,9 @@ public final GcnService getService() { return DATABASE; } + /** + * @return optional environment element for @MicronautTest in generated test classes + */ protected String genreControllerTestEnv() { return ""; } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AwsDatabase.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AwsDatabase.java index b8eef96..5b1f038 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AwsDatabase.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AwsDatabase.java @@ -22,6 +22,7 @@ import io.micronaut.starter.feature.database.MySQL; import io.micronaut.starter.feature.database.jdbc.JdbcFeature; import io.micronaut.starter.feature.migration.Flyway; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.AWS; @@ -45,8 +46,9 @@ public AwsDatabase(Data data, DataJdbc dataJdbc, Flyway flyway, JdbcFeature jdbcFeature, - MySQL defaultDriverFeature) { - super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature); + MySQL defaultDriverFeature, + MicronautValidationFeature micronautValidationFeature) { + super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature, micronautValidationFeature); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AzureDatabase.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AzureDatabase.java index b1739a2..82bf303 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AzureDatabase.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/AzureDatabase.java @@ -22,6 +22,7 @@ import io.micronaut.starter.feature.database.MySQL; import io.micronaut.starter.feature.database.jdbc.JdbcFeature; import io.micronaut.starter.feature.migration.Flyway; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.AZURE; @@ -45,8 +46,9 @@ public AzureDatabase(Data data, DataJdbc dataJdbc, Flyway flyway, JdbcFeature jdbcFeature, - MySQL defaultDriverFeature) { - super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature); + MySQL defaultDriverFeature, + MicronautValidationFeature micronautValidationFeature) { + super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature, micronautValidationFeature); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/GcpDatabase.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/GcpDatabase.java index 2f2662d..3228b48 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/GcpDatabase.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/GcpDatabase.java @@ -22,6 +22,7 @@ import io.micronaut.starter.feature.database.MySQL; import io.micronaut.starter.feature.database.jdbc.JdbcFeature; import io.micronaut.starter.feature.migration.Flyway; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.GCP; @@ -45,8 +46,9 @@ public GcpDatabase(Data data, DataJdbc dataJdbc, Flyway flyway, JdbcFeature jdbcFeature, - MySQL defaultDriverFeature) { - super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature); + MySQL defaultDriverFeature, + MicronautValidationFeature micronautValidationFeature) { + super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature, micronautValidationFeature); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/NonCloudDatabase.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/NonCloudDatabase.java index de00167..25659af 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/NonCloudDatabase.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/NonCloudDatabase.java @@ -22,6 +22,7 @@ import io.micronaut.starter.feature.database.MySQL; import io.micronaut.starter.feature.database.jdbc.JdbcFeature; import io.micronaut.starter.feature.migration.Flyway; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.NONE; @@ -46,8 +47,9 @@ public NonCloudDatabase(Data data, DataJdbc dataJdbc, Flyway flyway, JdbcFeature jdbcFeature, - MySQL defaultDriverFeature) { - super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature); + MySQL defaultDriverFeature, + MicronautValidationFeature micronautValidationFeature) { + super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature, micronautValidationFeature); } @Override diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/OciDatabase.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/OciDatabase.java index 59edd9a..9fcaabc 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/OciDatabase.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/OciDatabase.java @@ -22,6 +22,7 @@ import io.micronaut.starter.feature.database.MySQL; import io.micronaut.starter.feature.database.jdbc.JdbcFeature; import io.micronaut.starter.feature.migration.Flyway; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.OCI; @@ -45,8 +46,9 @@ public OciDatabase(Data data, DataJdbc dataJdbc, Flyway flyway, JdbcFeature jdbcFeature, - MySQL defaultDriverFeature) { - super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature); + MySQL defaultDriverFeature, + MicronautValidationFeature micronautValidationFeature) { + super(data, dataJdbc, flyway, jdbcFeature, defaultDriverFeature, micronautValidationFeature); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerGroovy.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerGroovy.rocker.raw index 14e8323..69fc550 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerGroovy.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerGroovy.rocker.raw @@ -19,8 +19,8 @@ import io.micronaut.http.annotation.Status import io.micronaut.scheduling.TaskExecutors import io.micronaut.scheduling.annotation.ExecuteOn -import javax.validation.Valid -import javax.validation.constraints.NotBlank +import jakarta.validation.Valid +import jakarta.validation.constraints.NotBlank import static io.micronaut.http.HttpHeaders.LOCATION import static io.micronaut.http.HttpStatus.NO_CONTENT diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerJava.rocker.raw index bc3d698..bceecc4 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerJava.rocker.raw @@ -19,8 +19,8 @@ import io.micronaut.http.annotation.Status; import io.micronaut.scheduling.TaskExecutors; import io.micronaut.scheduling.annotation.ExecuteOn; -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import java.net.URI; import java.util.List; import java.util.Optional; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerKotlin.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerKotlin.rocker.raw index 61a39e9..bd35ed5 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerKotlin.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreControllerKotlin.rocker.raw @@ -22,8 +22,8 @@ import io.micronaut.scheduling.TaskExecutors import io.micronaut.scheduling.annotation.ExecuteOn import java.net.URI import java.util.Optional -import javax.validation.Valid -import javax.validation.constraints.NotBlank +import jakarta.validation.Valid +import jakarta.validation.constraints.NotBlank @@ExecuteOn(TaskExecutors.IO) @@Controller("/genres") diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreGroovy.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreGroovy.rocker.raw index f2961dc..baba07b 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreGroovy.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreGroovy.rocker.raw @@ -9,10 +9,12 @@ import groovy.transform.CompileStatic import io.micronaut.data.annotation.GeneratedValue import io.micronaut.data.annotation.Id import io.micronaut.data.annotation.MappedEntity +import io.micronaut.serde.annotation.Serdeable -import javax.validation.constraints.NotNull +import jakarta.validation.constraints.NotNull @@CompileStatic +@@Serdeable @@MappedEntity class Genre { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreJava.rocker.raw index a3e45a1..73aa955 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreJava.rocker.raw @@ -8,9 +8,11 @@ package @(project.getPackageName()).domain; import io.micronaut.data.annotation.GeneratedValue; import io.micronaut.data.annotation.Id; import io.micronaut.data.annotation.MappedEntity; +import io.micronaut.serde.annotation.Serdeable; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +@@Serdeable @@MappedEntity public class Genre { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreKotlin.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreKotlin.rocker.raw index f5859f0..94b172f 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreKotlin.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreKotlin.rocker.raw @@ -8,7 +8,9 @@ package @(project.getPackageName()).domain import io.micronaut.data.annotation.GeneratedValue import io.micronaut.data.annotation.Id import io.micronaut.data.annotation.MappedEntity +import io.micronaut.serde.annotation.Serdeable +@@Serdeable @@MappedEntity data class Genre( @@field:Id diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryGroovy.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryGroovy.rocker.raw index 36aa782..0087b3f 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryGroovy.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryGroovy.rocker.raw @@ -11,7 +11,7 @@ import io.micronaut.data.annotation.Id import io.micronaut.data.jdbc.annotation.JdbcRepository import io.micronaut.data.repository.PageableRepository -import javax.validation.constraints.NotBlank +import jakarta.validation.constraints.NotBlank import static io.micronaut.data.model.query.builder.sql.Dialect.@(dialect) diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryJava.rocker.raw index 82f0b88..55ebaa4 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryJava.rocker.raw @@ -11,7 +11,7 @@ import io.micronaut.data.annotation.Id; import io.micronaut.data.jdbc.annotation.JdbcRepository; import io.micronaut.data.repository.PageableRepository; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; import static io.micronaut.data.model.query.builder.sql.Dialect.@(dialect); diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryKotlin.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryKotlin.rocker.raw index 94e37e4..84c6fc7 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryKotlin.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreRepositoryKotlin.rocker.raw @@ -10,7 +10,7 @@ import io.micronaut.data.annotation.Id import io.micronaut.data.jdbc.annotation.JdbcRepository import io.micronaut.data.model.query.builder.sql.Dialect.@(dialect) import io.micronaut.data.repository.PageableRepository -import javax.validation.constraints.NotBlank +import jakarta.validation.constraints.NotBlank @@JdbcRepository(dialect = @(dialect)) interface GenreRepository : PageableRepository { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceGroovy.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceGroovy.rocker.raw index b910322..a8ac8c1 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceGroovy.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceGroovy.rocker.raw @@ -11,7 +11,7 @@ import groovy.transform.CompileStatic import io.micronaut.data.model.Pageable import jakarta.inject.Singleton -import javax.transaction.Transactional +import jakarta.transaction.Transactional @@CompileStatic @@Singleton diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceJava.rocker.raw index b4393cc..9751c41 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceJava.rocker.raw @@ -10,7 +10,7 @@ import @(rootPackage)repository.GenreRepository; import io.micronaut.data.model.Pageable; import jakarta.inject.Singleton; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import java.util.List; import java.util.Optional; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceKotlin.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceKotlin.rocker.raw index 68a52e3..2dcbc04 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceKotlin.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/database/template/GenreServiceKotlin.rocker.raw @@ -10,7 +10,7 @@ import @(rootPackage)repository.GenreRepository import io.micronaut.data.model.Pageable import jakarta.inject.Singleton import java.util.Optional -import javax.transaction.Transactional +import jakarta.transaction.Transactional @@Singleton open class GenreService(private val genreRepository: GenreRepository) { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AbstractEmailFeature.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AbstractEmailFeature.java index 879d125..e121443 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AbstractEmailFeature.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AbstractEmailFeature.java @@ -19,6 +19,9 @@ import cloud.graal.gcn.feature.service.AbstractGcnServiceFeature; import cloud.graal.gcn.model.GcnService; import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.application.ApplicationType; +import io.micronaut.starter.build.dependencies.Dependency; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import static cloud.graal.gcn.model.GcnService.EMAIL; @@ -29,10 +32,27 @@ */ public abstract class AbstractEmailFeature extends AbstractGcnServiceFeature { + private final MicronautValidationFeature micronautValidationFeature; + + protected AbstractEmailFeature(MicronautValidationFeature micronautValidationFeature) { + this.micronautValidationFeature = micronautValidationFeature; + } + @Override public final void apply(GcnGeneratorContext generatorContext) { + + applyForLib(generatorContext, () -> { + micronautValidationFeature.apply(generatorContext); + }); + addLibPlaceholders(generatorContext); doApply(generatorContext); + if (generatorContext.getApplicationType() == ApplicationType.FUNCTION) { + generatorContext.addDependency(Dependency.builder() + .groupId("io.micronaut") + .artifactId("micronaut-http-server-netty") + .testRuntime()); + } } /** diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AwsEmail.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AwsEmail.java index 330371a..c89fcdf 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AwsEmail.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AwsEmail.java @@ -34,6 +34,7 @@ import io.micronaut.starter.feature.aws.AwsV2Sdk; import io.micronaut.starter.feature.email.AmazonSesEmailFeature; import io.micronaut.starter.feature.reactor.Reactor; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.AWS; @@ -58,7 +59,9 @@ public class AwsEmail extends AbstractEmailFeature { */ public AwsEmail(AmazonSesEmailFeature amazonSesEmailFeature, AwsV2Sdk awsV2Sdk, - Reactor reactor) { + Reactor reactor, + MicronautValidationFeature micronautValidationFeature) { + super(micronautValidationFeature); this.awsV2Sdk = awsV2Sdk; this.amazonSesEmailFeature = amazonSesEmailFeature; this.reactor = reactor; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AzureEmail.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AzureEmail.java index edc0d7b..335541c 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AzureEmail.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/AzureEmail.java @@ -18,6 +18,7 @@ import cloud.graal.gcn.GcnGeneratorContext; import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.AZURE; @@ -30,6 +31,10 @@ @Singleton public class AzureEmail extends AbstractEmailFeature { + public AzureEmail(MicronautValidationFeature micronautValidationFeature) { + super(micronautValidationFeature); + } + @Override protected void doApply(GcnGeneratorContext generatorContext) { // TODO diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/GcpEmail.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/GcpEmail.java index 76eb60a..907f50a 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/GcpEmail.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/GcpEmail.java @@ -18,6 +18,7 @@ import cloud.graal.gcn.GcnGeneratorContext; import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.GCP; @@ -30,6 +31,10 @@ @Singleton public class GcpEmail extends AbstractEmailFeature { + public GcpEmail(MicronautValidationFeature micronautValidationFeature) { + super(micronautValidationFeature); + } + @Override protected void doApply(GcnGeneratorContext generatorContext) { // TODO diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/NonCloudEmail.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/NonCloudEmail.java index 9815e6a..fe0a43c 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/NonCloudEmail.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/NonCloudEmail.java @@ -30,6 +30,7 @@ import io.micronaut.starter.application.Project; import io.micronaut.starter.feature.config.ApplicationConfiguration; import io.micronaut.starter.feature.email.JavamailFeature; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.NONE; @@ -46,9 +47,10 @@ public class NonCloudEmail extends AbstractEmailFeature { private final JavamailFeature javamailFeature; /** - * @param javamailFeature JavamailFeature feature + * @param javamailFeature JavamailFeature feature */ - public NonCloudEmail(JavamailFeature javamailFeature) { + public NonCloudEmail(JavamailFeature javamailFeature, MicronautValidationFeature micronautValidationFeature) { + super(micronautValidationFeature); this.javamailFeature = javamailFeature; } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/OciEmail.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/OciEmail.java index 5973453..35769a1 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/OciEmail.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/OciEmail.java @@ -35,6 +35,7 @@ import io.micronaut.starter.feature.config.ApplicationConfiguration; import io.micronaut.starter.feature.email.JavamailFeature; import io.micronaut.starter.feature.email.TemplateEmailFeature; +import io.micronaut.starter.feature.validator.MicronautValidationFeature; import io.micronaut.starter.feature.view.Thymeleaf; import io.micronaut.starter.template.RockerTemplate; import jakarta.inject.Singleton; @@ -62,7 +63,9 @@ public class OciEmail extends AbstractEmailFeature { */ public OciEmail(JavamailFeature javamailFeature, TemplateEmailFeature templateEmailFeature, - Thymeleaf thymeleaf) { + Thymeleaf thymeleaf, + MicronautValidationFeature micronautValidationFeature) { + super(micronautValidationFeature); this.javamailFeature = javamailFeature; this.templateEmailFeature = templateEmailFeature; this.thymeleaf = thymeleaf; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementGroovy.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementGroovy.rocker.raw index ae13f2c..43b2a0b 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementGroovy.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementGroovy.rocker.raw @@ -19,8 +19,8 @@ import software.amazon.awssdk.services.ses.model.SendEmailResponse import software.amazon.awssdk.services.ses.model.SesRequest import software.amazon.awssdk.services.ses.model.SesResponse -import javax.validation.Valid -import javax.validation.constraints.NotNull +import jakarta.validation.Valid +import jakarta.validation.constraints.NotNull import java.util.function.Consumer @@Requires(property = 'spec.name', value = '@specName') diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementJava.rocker.raw index ba29667..f7e5e4d 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementJava.rocker.raw @@ -19,8 +19,8 @@ import software.amazon.awssdk.services.ses.model.SendEmailResponse; import software.amazon.awssdk.services.ses.model.SesRequest; import software.amazon.awssdk.services.ses.model.SesResponse; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementKotlin.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementKotlin.rocker.raw index 12cf2ed..6ada476 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementKotlin.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/AwsEmailSenderReplacementKotlin.rocker.raw @@ -19,7 +19,7 @@ import software.amazon.awssdk.services.ses.model.SendEmailResponse import software.amazon.awssdk.services.ses.model.SesRequest import software.amazon.awssdk.services.ses.model.SesResponse import java.util.function.Consumer -import javax.validation.Valid +import jakarta.validation.Valid @@Requires(property = "spec.name", value = "MailControllerTest") @@Singleton diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestJava.rocker.raw index 1740a1a..574ca4e 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestJava.rocker.raw @@ -18,7 +18,7 @@ import jakarta.inject.Inject; import jakarta.inject.Named; import org.junit.jupiter.api.Test; -import javax.mail.Message; +import jakarta.mail.Message; import java.util.Map; import java.util.function.Consumer; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestKotest.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestKotest.rocker.raw index 21ba79f..abc4f76 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestKotest.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestKotest.rocker.raw @@ -17,8 +17,8 @@ import io.micronaut.test.annotation.MockBean import io.micronaut.test.extensions.kotest.annotation.MicronautTest import jakarta.inject.Named import java.util.function.Consumer -import javax.mail.Message -import javax.validation.Valid +import jakarta.mail.Message +import jakarta.validation.Valid import io.micronaut.http.HttpStatus.ACCEPTED import io.micronaut.email.BodyType.HTML diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestKotlinJUnit.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestKotlinJUnit.rocker.raw index 4490a95..c643745 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestKotlinJUnit.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/NonCloudMailControllerTestKotlinJUnit.rocker.raw @@ -18,8 +18,8 @@ import jakarta.inject.Named import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import java.util.function.Consumer -import javax.mail.Message -import javax.validation.Valid +import jakarta.mail.Message +import jakarta.validation.Valid import io.micronaut.http.HttpStatus.ACCEPTED import io.micronaut.email.BodyType.HTML diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciEmailControllerTestJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciEmailControllerTestJava.rocker.raw index 2ce7648..208cd15 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciEmailControllerTestJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciEmailControllerTestJava.rocker.raw @@ -22,7 +22,7 @@ import jakarta.inject.Named; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -import javax.mail.Message; +import jakarta.mail.Message; import java.util.ArrayList; import java.util.List; import java.util.Optional; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderGroovy.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderGroovy.rocker.raw index bcc98fb..08ae8dd 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderGroovy.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderGroovy.rocker.raw @@ -12,9 +12,9 @@ import io.micronaut.email.javamail.sender.MailPropertiesProvider import io.micronaut.email.javamail.sender.SessionProvider import jakarta.inject.Singleton -import javax.mail.Authenticator -import javax.mail.PasswordAuthentication -import javax.mail.Session +import jakarta.mail.Authenticator +import jakarta.mail.PasswordAuthentication +import jakarta.mail.Session @@CompileStatic @@Singleton diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderJava.rocker.raw index f050512..679eadb 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderJava.rocker.raw @@ -11,9 +11,9 @@ import io.micronaut.email.javamail.sender.MailPropertiesProvider; import io.micronaut.email.javamail.sender.SessionProvider; import jakarta.inject.Singleton; -import javax.mail.Authenticator; -import javax.mail.PasswordAuthentication; -import javax.mail.Session; +import jakarta.mail.Authenticator; +import jakarta.mail.PasswordAuthentication; +import jakarta.mail.Session; import java.util.Properties; @@Singleton diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderKotlin.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderKotlin.rocker.raw index e2de7ac..c2b92fe 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderKotlin.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/email/template/OciSessionProviderKotlin.rocker.raw @@ -10,9 +10,9 @@ import io.micronaut.email.javamail.sender.MailPropertiesProvider import io.micronaut.email.javamail.sender.SessionProvider import jakarta.inject.Singleton import java.util.Properties -import javax.mail.Authenticator -import javax.mail.PasswordAuthentication -import javax.mail.Session +import jakarta.mail.Authenticator +import jakarta.mail.PasswordAuthentication +import jakarta.mail.Session @@Singleton class OciSessionProvider(provider: MailPropertiesProvider, diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AbstractK8sFeature.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AbstractK8sFeature.java index a6faeb1..6d60c4c 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AbstractK8sFeature.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AbstractK8sFeature.java @@ -22,6 +22,7 @@ import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.build.dependencies.Dependency; import io.micronaut.starter.feature.k8s.KubernetesClient; +import io.micronaut.starter.feature.other.Management; import static cloud.graal.gcn.model.GcnService.K8S; import static io.micronaut.starter.feature.k8s.KubernetesClient.MICRONAUT_KUBERNETES_GROUP_ID; @@ -34,17 +35,20 @@ public abstract class AbstractK8sFeature extends AbstractGcnServiceFeature { private final KubernetesClient kubernetesClient; + private final Management management; /** * @param kubernetesClient KubernetesClient feature */ - protected AbstractK8sFeature(KubernetesClient kubernetesClient) { + protected AbstractK8sFeature(KubernetesClient kubernetesClient, Management management) { this.kubernetesClient = kubernetesClient; + this.management = management; } @Override public final void processSelectedFeatures(GcnFeatureContext featureContext) { featureContext.addFeature(kubernetesClient, KubernetesClient.class); + featureContext.addFeature(management, Management.class); } @Override diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AwsK8s.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AwsK8s.java index b9df578..8a7bc8d 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AwsK8s.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AwsK8s.java @@ -18,6 +18,7 @@ import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.feature.k8s.KubernetesClient; +import io.micronaut.starter.feature.other.Management; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.AWS; @@ -33,8 +34,8 @@ public class AwsK8s extends AbstractK8sFeature { /** * @param kubernetesClient KubernetesClient feature */ - public AwsK8s(KubernetesClient kubernetesClient) { - super(kubernetesClient); + public AwsK8s(KubernetesClient kubernetesClient, Management management) { + super(kubernetesClient, management); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AzureK8s.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AzureK8s.java index 1680830..aeaea76 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AzureK8s.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/AzureK8s.java @@ -18,6 +18,7 @@ import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.feature.k8s.KubernetesClient; +import io.micronaut.starter.feature.other.Management; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.AZURE; @@ -33,8 +34,8 @@ public class AzureK8s extends AbstractK8sFeature { /** * @param kubernetesClient KubernetesClient feature */ - public AzureK8s(KubernetesClient kubernetesClient) { - super(kubernetesClient); + public AzureK8s(KubernetesClient kubernetesClient, Management management) { + super(kubernetesClient, management); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/GcpK8s.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/GcpK8s.java index a72109e..1d63b20 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/GcpK8s.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/GcpK8s.java @@ -18,6 +18,7 @@ import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.feature.k8s.KubernetesClient; +import io.micronaut.starter.feature.other.Management; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.GCP; @@ -33,8 +34,8 @@ public class GcpK8s extends AbstractK8sFeature { /** * @param kubernetesClient KubernetesClient feature */ - public GcpK8s(KubernetesClient kubernetesClient) { - super(kubernetesClient); + public GcpK8s(KubernetesClient kubernetesClient, Management management) { + super(kubernetesClient, management); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/NonCloudK8s.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/NonCloudK8s.java index 2053f6a..cb6b497 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/NonCloudK8s.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/NonCloudK8s.java @@ -18,6 +18,7 @@ import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.feature.k8s.KubernetesClient; +import io.micronaut.starter.feature.other.Management; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.NONE; @@ -34,8 +35,8 @@ public class NonCloudK8s extends AbstractK8sFeature { /** * @param kubernetesClient KubernetesClient feature */ - public NonCloudK8s(KubernetesClient kubernetesClient) { - super(kubernetesClient); + public NonCloudK8s(KubernetesClient kubernetesClient, Management management) { + super(kubernetesClient, management); } @Override diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/OciK8s.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/OciK8s.java index 68460f3..82ec969 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/OciK8s.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/k8s/OciK8s.java @@ -18,6 +18,7 @@ import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.feature.k8s.KubernetesClient; +import io.micronaut.starter.feature.other.Management; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.OCI; @@ -33,8 +34,8 @@ public class OciK8s extends AbstractK8sFeature { /** * @param kubernetesClient KubernetesClient feature */ - public OciK8s(KubernetesClient kubernetesClient) { - super(kubernetesClient); + public OciK8s(KubernetesClient kubernetesClient, Management management) { + super(kubernetesClient, management); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/GcpLogging.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/GcpLogging.java index 31f15bd..2ff6a92 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/GcpLogging.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/GcpLogging.java @@ -16,8 +16,15 @@ package cloud.graal.gcn.feature.service.logging; import cloud.graal.gcn.GcnGeneratorContext; +import cloud.graal.gcn.feature.service.logging.template.LogControllerGroovy; +import cloud.graal.gcn.feature.service.logging.template.LogControllerJava; +import cloud.graal.gcn.feature.service.logging.template.LogControllerKotlin; +import cloud.graal.gcn.feature.service.logging.template.LogbackXml; import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.application.Project; +import io.micronaut.starter.build.dependencies.Dependency; +import io.micronaut.starter.template.RockerTemplate; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.GCP; @@ -32,7 +39,30 @@ public class GcpLogging extends AbstractLoggingFeature { @Override protected void doApply(GcnGeneratorContext generatorContext) { - // TODO + + generatorContext.addDependency(Dependency.builder() + .groupId("com.google.cloud") + .artifactId("google-cloud-logging-logback") + .version("0.130.11-alpha") + .compile()); + + generatorContext.addTemplate("loggingConfig-gcp", + new RockerTemplate(getModuleName(), "src/main/resources/logback.xml", + LogbackXml.template("GOOGLE", + "com.google.cloud.logging.logback.LoggingAppender", + "", + getModuleName()))); + + if (generatorContext.generateExampleCode()) { + + Project project = generatorContext.getProject(); + + generatorContext.addTemplate(getModuleName(), "GcpLogController", + generatorContext.getSourcePath("/{packagePath}/LogController"), + LogControllerJava.template(project), + LogControllerKotlin.template(project), + LogControllerGroovy.template(project)); + } } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/OciLogging.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/OciLogging.java index 2547809..a8a73e8 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/OciLogging.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/OciLogging.java @@ -67,7 +67,7 @@ protected void doApply(GcnGeneratorContext generatorContext) { new RockerTemplate(getModuleName(), "src/main/resources/logback.xml", LogbackXml.template("ORACLE", "io.micronaut.oraclecloud.logging.OracleCloudAppender", - "ch.qos.logback.contrib.jackson.JacksonJsonFormatter", + "io.micronaut.oraclecloud.logging.OracleCloudJsonFormatter", getModuleName()))); if (generatorContext.generateExampleCode()) { diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/template/LogbackXml.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/template/LogbackXml.rocker.raw index 065a2e0..83ff394 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/template/LogbackXml.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/logging/template/LogbackXml.rocker.raw @@ -23,11 +23,13 @@ @if ("oci".equals(cloud)) { } + @if(!"gcp".equals(cloud)) { + } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/metrics/GcpMetrics.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/metrics/GcpMetrics.java index 88805c4..a8b1495 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/metrics/GcpMetrics.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/metrics/GcpMetrics.java @@ -20,8 +20,8 @@ import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; import io.micronaut.starter.feature.micrometer.Core; -import io.micronaut.starter.feature.other.Management; import io.micronaut.starter.feature.micrometer.Stackdriver; +import io.micronaut.starter.feature.other.Management; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.GCP; @@ -37,8 +37,8 @@ public class GcpMetrics extends AbstractMetricsFeature { private final Stackdriver stackDriver; /** - * @param core the Core feature - * @param management the Management feature + * @param core the Core feature + * @param management the Management feature * @param stackDriver the StackDriver feature */ public GcpMetrics(Core core, diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/AbstractObjectStore.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/AbstractObjectStore.java index 191787d..3c579bd 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/AbstractObjectStore.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/AbstractObjectStore.java @@ -101,7 +101,7 @@ public final void apply(GcnGeneratorContext generatorContext) { ProfilePicturesControllerTestKotest.template(project)); applyForCloud(generatorContext, () -> { - if (generatorContext.getFeatures().testFramework().isJunit()) { + if (generatorContext.getFeatures().testFramework().isJunit() || generatorContext.getFeatures().testFramework().isKoTest()) { if (generatorContext.getFeatures().language().isKotlin()) { Dependency.Builder mockk = Dependency.builder() .groupId("io.mockk") diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/template/ProfilePicturesControllerTestGroovyJUnit.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/template/ProfilePicturesControllerTestGroovyJUnit.rocker.raw index 8d5aa04..8b41405 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/template/ProfilePicturesControllerTestGroovyJUnit.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/template/ProfilePicturesControllerTestGroovyJUnit.rocker.raw @@ -16,6 +16,7 @@ import io.micronaut.objectstorage.response.UploadResponse import io.micronaut.test.extensions.junit5.annotation.MicronautTest import jakarta.inject.Inject import jakarta.inject.Singleton +import java.io.InputStream import org.junit.jupiter.api.Test import static io.micronaut.http.HttpHeaders.ETAG @@ -74,13 +75,15 @@ class ProfilePicturesControllerTest { @@Test void download() { + ObjectStorageEntry objectStorageEntry = mock(ObjectStorageEntry.class); + when(objectStorageEntry.getInputStream()).then(invocation -> InputStream.nullInputStream()); when(objectStorageOperations.retrieve("avatar.jpg")) - .then(invocation -> Optional.of(mock(ObjectStorageEntry))) + .then(invocation -> Optional.of(objectStorageEntry)); - def response = client.toBlocking().exchange("/avatar") + var response = client.toBlocking().exchange("/avatar"); - assertEquals(OK, response.status()) - verify(objectStorageOperations).retrieve("avatar.jpg") + assertEquals(OK, response.status()); + verify(objectStorageOperations).retrieve("avatar.jpg"); } @@Test diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/template/ProfilePicturesControllerTestJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/template/ProfilePicturesControllerTestJava.rocker.raw index c29a789..15cdc35 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/template/ProfilePicturesControllerTestJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/objectstore/template/ProfilePicturesControllerTestJava.rocker.raw @@ -17,6 +17,7 @@ import io.micronaut.test.extensions.junit5.annotation.MicronautTest; import jakarta.inject.Inject; import org.junit.jupiter.api.Test; +import java.io.InputStream; import java.util.Optional; import static io.micronaut.http.HttpHeaders.ETAG; @@ -81,6 +82,10 @@ class ProfilePicturesControllerTest { void download() { when(objectStorageOperations.retrieve("avatar.jpg")) .then(invocation -> Optional.of(mock(ObjectStorageEntry.class))); + ObjectStorageEntry objectStorageEntry = mock(ObjectStorageEntry.class); + when(objectStorageEntry.getInputStream()).then(invocation -> InputStream.nullInputStream()); + when(objectStorageOperations.retrieve("avatar.jpg")) + .then(invocation -> Optional.of(objectStorageEntry)); var response = client.toBlocking().exchange("/avatar"); diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/AwsSecretManagement.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/AwsSecretManagement.java index fb22510..ce81305 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/AwsSecretManagement.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/AwsSecretManagement.java @@ -113,7 +113,7 @@ protected void doApply(GcnGeneratorContext generatorContext) { SdkHttpClientTestKotest.template(project)); } - for (ApplicationConfiguration config: List.of(generatorContext.getDevConfiguration(), generatorContext.getConfiguration())) { + for (ApplicationConfiguration config : List.of(generatorContext.getDevConfiguration(), generatorContext.getConfiguration())) { config.remove("micronaut.security.oauth2.clients.default.client-id"); config.remove("micronaut.security.oauth2.clients.default.client-secret"); config.addNested("micronaut.security.oauth2.clients.demo-oauth.client-id", "${OAUTH_CLIENT_ID:XXX}"); diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/GcpSecretManagement.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/GcpSecretManagement.java index ede2120..7f2b2fa 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/GcpSecretManagement.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/GcpSecretManagement.java @@ -34,6 +34,9 @@ public class GcpSecretManagement extends AbstractSecretManagementFeature { private final GoogleSecretManager googleSecretManager; + /** + * @param googleSecretManager GoogleSecretManager feature + */ public GcpSecretManagement(GoogleSecretManager googleSecretManager) { this.googleSecretManager = googleSecretManager; } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/OciSecretManagement.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/OciSecretManagement.java index ac350d9..05e1f42 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/OciSecretManagement.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/secretmanagement/OciSecretManagement.java @@ -48,7 +48,7 @@ public void processSelectedFeatures(GcnFeatureContext featureContext) { @Override protected void doApply(GcnGeneratorContext generatorContext) { - // TODO code gen + // no-op } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/security/AwsSecurity.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/security/AwsSecurity.java index df28c42..b34c7b8 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/security/AwsSecurity.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/security/AwsSecurity.java @@ -64,7 +64,7 @@ protected void doApply(GcnGeneratorContext generatorContext) { config.addNested("micronaut.security.authentication", "idtoken"); config.addNested("micronaut.security.oauth2.clients.cognito.client-id", "${OAUTH_CLIENT_ID:xxx}"); config.addNested("micronaut.security.oauth2.clients.cognito.client-secret", "${OAUTH_CLIENT_SECRET:yyy}"); - config.addNested("micronaut.security.oauth2.clients.cognito.openid.issuer", "https://cognito-idp.${COGNITO_REGION:zzz}.amazonaws.com/${COGNITO_POOL_ID:www}/"); + config.addNested("micronaut.security.oauth2.clients.cognito.openid.issuer", "https://cognito-idp.${COGNITO_REGION:zzz}.amazonaws.com/${COGNITO_POOL_ID:www}"); config.addNested("micronaut.security.endpoints.logout.get-allowed", true); } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/AwsStreaming.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/AwsStreaming.java index 774176e..d9182da 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/AwsStreaming.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/AwsStreaming.java @@ -38,7 +38,7 @@ public class AwsStreaming extends AbstractStreamingFeature { private static final Dependency AWS_IAM_AUTH_LIB = Dependency.builder() .groupId("software.amazon.msk") .artifactId("aws-msk-iam-auth") - .version("1.1.5") + .version("1.1.9") .runtime() .build(); diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/GcpStreaming.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/GcpStreaming.java index 6e98c32..f0849c3 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/GcpStreaming.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/GcpStreaming.java @@ -53,7 +53,7 @@ protected void doApply(GcnGeneratorContext generatorContext) { // fetch: // bytes: 1048576 ApplicationConfiguration config = generatorContext.getConfiguration(); - config.addNested("kafka.bootstrap.servers", "${OCI_STREAM_POOL_FQDN}:9092"); + config.addNested("kafka.bootstrap.servers", "${KAFKA_BOOTSTRAP_SERVERS}"); config.addNested("kafka.max.partition.fetch.bytes", 1048576); config.addNested("kafka.max.request.size", 1048576); config.addNested("kafka.retries", 3); diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/NonCloudStreaming.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/NonCloudStreaming.java index 58c907a..305feae 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/NonCloudStreaming.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/NonCloudStreaming.java @@ -18,6 +18,7 @@ import cloud.graal.gcn.GcnGeneratorContext; import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.feature.config.ApplicationConfiguration; import io.micronaut.starter.feature.messaging.kafka.Kafka; import jakarta.inject.Singleton; @@ -41,6 +42,9 @@ public NonCloudStreaming(Kafka kafka) { @Override protected void doApply(GcnGeneratorContext generatorContext) { + ApplicationConfiguration config = generatorContext.getConfiguration(); + config.addNested("kafka.bootstrap.servers", "localhost:9092"); + config.addNested("kafka.enabled", "true"); } @Override diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/OciStreaming.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/OciStreaming.java index a957a58..4010f7a 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/OciStreaming.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/streaming/OciStreaming.java @@ -79,6 +79,7 @@ protected void doApply(GcnGeneratorContext generatorContext) { config.addNested("kafka.sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"${OCI_TENANCY_NAME}/${OCI_USERNAME}/${OCI_STREAM_POOL_OCID}\" password=\"${OCI_AUTH_TOKEN}\";"); config.addNested("kafka.sasl.mechanism", "PLAIN"); config.addNested("kafka.security.protocol", "SASL_SSL"); + config.addNested("kafka.enable.idempotence", "false"); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/AbstractTracingFeature.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/AbstractTracingFeature.java index dfd5370..7933cb4 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/AbstractTracingFeature.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/AbstractTracingFeature.java @@ -90,7 +90,6 @@ public final void apply(GcnGeneratorContext generatorContext) { } applyForLib(generatorContext, () -> { - openTelemetry.apply(generatorContext); openTelemetryHttp.apply(generatorContext); openTelemetryAnnotations.apply(generatorContext); diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/AwsTracing.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/AwsTracing.java index 6ec2810..b3009da 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/AwsTracing.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/AwsTracing.java @@ -58,6 +58,7 @@ public AwsTracing(OpenTelemetry openTelemetry, @Override public void processSelectedFeatures(GcnFeatureContext featureContext) { + super.processSelectedFeatures(featureContext); featureContext.addFeature(openTelemetryXray, OpenTelemetryXray.class); featureContext.addFeature(openTelemetryExporterOtlp, OpenTelemetryExporterOtlp.class); } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/GcpTracing.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/GcpTracing.java index fe8d49a..a56b6b9 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/GcpTracing.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/GcpTracing.java @@ -53,6 +53,7 @@ public GcpTracing(OpenTelemetry openTelemetry, @Override public void processSelectedFeatures(GcnFeatureContext featureContext) { + super.processSelectedFeatures(featureContext); featureContext.addFeature(openTelemetryGoogleCloudTrace, OpenTelemetryGoogleCloudTrace.class); } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/OciTracing.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/OciTracing.java index 6ff0a2c..74bf032 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/OciTracing.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/OciTracing.java @@ -16,14 +16,12 @@ package cloud.graal.gcn.feature.service.tracing; import cloud.graal.gcn.GcnGeneratorContext; -import cloud.graal.gcn.feature.GcnFeatureContext; import cloud.graal.gcn.model.GcnCloud; import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.build.dependencies.Dependency; import io.micronaut.starter.feature.opentelemetry.OpenTelemetry; import io.micronaut.starter.feature.opentelemetry.OpenTelemetryAnnotations; -import io.micronaut.starter.feature.opentelemetry.OpenTelemetryExporterZipkin; import io.micronaut.starter.feature.opentelemetry.OpenTelemetryHttp; -import io.micronaut.starter.feature.opentelemetry.OpenTelemetryZipkin; import jakarta.inject.Singleton; import static cloud.graal.gcn.model.GcnCloud.OCI; @@ -36,38 +34,33 @@ @Singleton public class OciTracing extends AbstractTracingFeature { - private final OpenTelemetryZipkin openTelemetryZipkin; - private final OpenTelemetryExporterZipkin openTelemetryExporterZipkin; - /** - * @param openTelemetry OpenTelemetry feature - * @param openTelemetryHttp OpenTelemetryHttp feature - * @param openTelemetryAnnotations OpenTelemetryAnnotations feature - * @param openTelemetryZipkin OpenTelemetryZipkin feature - * @param openTelemetryExporterZipkin OpenTelemetryExporterZipkin feature + * @param openTelemetry OpenTelemetry feature + * @param openTelemetryHttp OpenTelemetryHttp feature + * @param openTelemetryAnnotations OpenTelemetryAnnotations feature */ public OciTracing(OpenTelemetry openTelemetry, OpenTelemetryHttp openTelemetryHttp, - OpenTelemetryAnnotations openTelemetryAnnotations, - OpenTelemetryZipkin openTelemetryZipkin, - OpenTelemetryExporterZipkin openTelemetryExporterZipkin) { + OpenTelemetryAnnotations openTelemetryAnnotations) { super(openTelemetry, openTelemetryHttp, openTelemetryAnnotations); - this.openTelemetryZipkin = openTelemetryZipkin; - this.openTelemetryExporterZipkin = openTelemetryExporterZipkin; - } - - @Override - public void processSelectedFeatures(GcnFeatureContext featureContext) { - featureContext.addFeature(openTelemetryZipkin, OpenTelemetryZipkin.class); - featureContext.addFeature(openTelemetryExporterZipkin, OpenTelemetryExporterZipkin.class); } @Override protected void doApply(GcnGeneratorContext generatorContext) { + generatorContext.addDependency( + Dependency.builder() + .groupId("io.micronaut.tracing") + .artifactId("micronaut-tracing-opentelemetry-zipkin-exporter") + .compile() + .build() + ); + generatorContext.getConfiguration().addNested( + "otel.exporter.zipkin.url", + "https://"); generatorContext.getConfiguration().addNested( - "otel.exporter.zipkin.endpoint", - "https://[redacted].apm-agt.us-phoenix-1.oci.oraclecloud.com/20200101/observations/public-span" + - "?dataFormat=zipkin&dataFormatVersion=2&dataKey=[public key]"); + "otel.exporter.zipkin.path", + "/20200101/observations/public-span?dataFormat=zipkin&dataFormatVersion=2&dataKey=[public key]" + ); } @NonNull diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceGroovy.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceGroovy.rocker.raw index 6e58cb8..5fd98f3 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceGroovy.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceGroovy.rocker.raw @@ -6,10 +6,10 @@ package @(project.getPackageName()) } import groovy.transform.CompileStatic +import io.micronaut.tracing.annotation.NewSpan +import io.micronaut.tracing.annotation.SpanTag import io.opentelemetry.api.trace.Span import io.opentelemetry.api.trace.Tracer -import io.opentelemetry.extension.annotations.SpanAttribute -import io.opentelemetry.extension.annotations.WithSpan import jakarta.inject.Singleton import java.util.concurrent.ConcurrentHashMap @@ -37,8 +37,8 @@ class InventoryService { return inventory.keySet() } - @@WithSpan('stock-counts') // <2> - Map getStockCounts(@@SpanAttribute('inventory.item') String item) { // <3> + @@NewSpan('stock-counts') // <2> + Map getStockCounts(@@SpanTag('inventory.item') String item) { // <3> Map counts = [:] if (inventory.containsKey(item)) { int count = inventory[item] diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceJava.rocker.raw index 772af72..617ff20 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceJava.rocker.raw @@ -5,10 +5,10 @@ package @(project.getPackageName()); } +import io.micronaut.tracing.annotation.NewSpan; +import io.micronaut.tracing.annotation.SpanTag; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.extension.annotations.SpanAttribute; -import io.opentelemetry.extension.annotations.WithSpan; import jakarta.inject.Singleton; import java.util.Collection; @@ -38,8 +38,8 @@ public class InventoryService { return inventory.keySet(); } - @@WithSpan("stock-counts") // <2> - public Map getStockCounts(@@SpanAttribute("inventory.item") String item) { // <3> + @@NewSpan("stock-counts") // <2> + public Map getStockCounts(@@SpanTag("inventory.item") String item) { // <3> Map counts = new HashMap<>(); if (inventory.containsKey(item)) { int count = inventory.get(item); diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceKotlin.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceKotlin.rocker.raw index 00597a9..15a48d4 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceKotlin.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/InventoryServiceKotlin.rocker.raw @@ -5,10 +5,10 @@ package @(project.getPackageName()) } +import io.micronaut.tracing.annotation.NewSpan +import io.micronaut.tracing.annotation.SpanTag import io.opentelemetry.api.trace.Span import io.opentelemetry.api.trace.Tracer -import io.opentelemetry.extension.annotations.SpanAttribute -import io.opentelemetry.extension.annotations.WithSpan import jakarta.inject.Singleton import java.util.concurrent.ConcurrentHashMap @@ -27,8 +27,8 @@ class InventoryService constructor(private val tracer: Tracer, val productNames: Collection get() = inventory.keys - @@WithSpan("stock-counts") // <2> - fun getStockCounts(@@SpanAttribute("inventory.item") item: String): Map { // <3> + @@NewSpan("stock-counts") // <2> + fun getStockCounts(@@SpanTag("inventory.item") item: String): Map { // <3> val counts = mutableMapOf() if (inventory.containsKey(item)) { val count = inventory[item]!! diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientGroovy.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientGroovy.rocker.raw index 45a0108..8782dc5 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientGroovy.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientGroovy.rocker.raw @@ -10,19 +10,18 @@ import io.micronaut.http.annotation.Post import io.micronaut.http.annotation.QueryValue import io.micronaut.http.client.annotation.Client import io.micronaut.tracing.annotation.ContinueSpan +import io.micronaut.tracing.annotation.NewSpan import io.micronaut.tracing.annotation.SpanTag -import io.opentelemetry.extension.annotations.SpanAttribute -import io.opentelemetry.extension.annotations.WithSpan @@Client('/warehouse') // <1> interface WarehouseClient { @@Post('/order') - @@WithSpan + @@NewSpan void order(@@SpanTag('warehouse.order') Map json) @@Get('/count') @@ContinueSpan int getItemCount(@@QueryValue String store, - @@SpanAttribute @@QueryValue int upc) + @@SpanTag @@QueryValue int upc) } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientJava.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientJava.rocker.raw index 2415854..bc302b1 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientJava.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientJava.rocker.raw @@ -10,9 +10,8 @@ import io.micronaut.http.annotation.Post; import io.micronaut.http.annotation.QueryValue; import io.micronaut.http.client.annotation.Client; import io.micronaut.tracing.annotation.ContinueSpan; +import io.micronaut.tracing.annotation.NewSpan; import io.micronaut.tracing.annotation.SpanTag; -import io.opentelemetry.extension.annotations.SpanAttribute; -import io.opentelemetry.extension.annotations.WithSpan; import java.util.Map; @@ -20,11 +19,11 @@ import java.util.Map; public interface WarehouseClient { @@Post("/order") - @@WithSpan + @@NewSpan void order(@@SpanTag("warehouse.order") Map json); @@Get("/count") @@ContinueSpan int getItemCount(@@QueryValue String store, - @@SpanAttribute @@QueryValue int upc); + @@SpanTag @@QueryValue int upc); } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientKotlin.rocker.raw b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientKotlin.rocker.raw index 92f631a..c809802 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientKotlin.rocker.raw +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/feature/service/tracing/template/WarehouseClientKotlin.rocker.raw @@ -11,18 +11,17 @@ import io.micronaut.http.annotation.QueryValue import io.micronaut.http.client.annotation.Client import io.micronaut.tracing.annotation.ContinueSpan import io.micronaut.tracing.annotation.SpanTag -import io.opentelemetry.extension.annotations.SpanAttribute -import io.opentelemetry.extension.annotations.WithSpan +import io.micronaut.tracing.annotation.NewSpan @@Client("/warehouse") // <1> interface WarehouseClient { @@Post("/order") - @@WithSpan + @@NewSpan fun order(@@SpanTag("warehouse.order") json: Map) @@Get("/count") @@ContinueSpan fun getItemCount(@@QueryValue store: String, - @@SpanAttribute @@QueryValue upc: Int): Int + @@SpanTag @@QueryValue upc: Int): Int } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/model/GcnCloud.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/model/GcnCloud.java index 1850c2b..7a24da7 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/model/GcnCloud.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/model/GcnCloud.java @@ -88,7 +88,7 @@ public String getEnvironmentName() { /** * @return the environment name suffix, used for config file suffix, - * e.g., "-oraclecloud" for application-oraclecloud.yml + * e.g., "-oraclecloud" for application-oraclecloud.properties */ public String getEnvironmentNameSuffix() { return environmentNameSuffix; @@ -120,8 +120,8 @@ public String getModuleName() { * @return the subset of GcnCloud enum values that are currently supported */ public static GcnCloud[] supportedValues() { -// return SUPPORTED; // TODO only supporting AWS, OCI, and GCP for now - return new GcnCloud[]{GcnCloud.AWS, GcnCloud.OCI, GcnCloud.GCP}; +// return SUPPORTED; // TODO only supporting AWS, GCP, and OCI for now + return new GcnCloud[]{GcnCloud.AWS, GcnCloud.GCP, GcnCloud.OCI}; } /** diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/model/GcnService.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/model/GcnService.java index 96cfcbb..af09810 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/model/GcnService.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/model/GcnService.java @@ -27,106 +27,106 @@ public enum GcnService { * Database service. */ DATABASE( - "Database", - "Provides a database access toolkit for repository interfaces", - "database" + "Database", + "Provides a database access toolkit for repository interfaces", + "database" ), /** * Email service. */ EMAIL( - "Email", - "Provides integration with multiple email providers", - "email" + "Email", + "Provides integration with multiple email providers", + "email" ), /** * Kubernetes service. */ K8S( - "Kubernetes", - "Provides integration with Kubernetes", - "kubernetes" + "Kubernetes", + "Provides integration with Kubernetes", + "kubernetes" ), /** * Logging service. */ LOGGING( - "Logging", - "Provides integration with multiple logging frameworks and various other appenders (including email and databases)", - "logging" + "Logging", + "Provides integration with multiple logging frameworks and various other appenders (including email and databases)", + "logging" ), /** * Metrics service. */ METRICS( - "Metrics", - "Provides integration with cloud-specific monitoring services", - "metrics" + "Metrics", + "Provides integration with cloud-specific monitoring services", + "metrics" ), /** * Object Storage service. */ OBJECTSTORE( - "Object Storage", - "Provides integration with cloud-specific storage solutions for large objects", - "object-storage" + "Object Storage", + "Provides integration with cloud-specific storage solutions for large objects", + "object-storage" ), /** * SDK service. */ SDK( - "SDK", - "Provides an API for developer access to cloud services" + "SDK", + "Provides an API for developer access to cloud services" ), /** * Secret management service. */ SECRETMANAGEMENT("" + - "Secret Management", - "Provides integration with the Secret Manager of the corresponding cloud platform", - "secret-management" + "Secret Management", + "Provides integration with the Secret Manager of the corresponding cloud platform", + "secret-management" ), /** * Security service. */ SECURITY( - "Security", - "Provides functionality to authenticate with OAuth 2.0 servers, including support for the OpenID standard", - "authentication" + "Security", + "Provides functionality to authenticate with OAuth 2.0 servers, including support for the OpenID standard", + "authentication" ), /** * Streaming service. */ STREAMING( - "Streaming", - "Provides integration with Apache Kafka", - "streaming" + "Streaming", + "Provides integration with Apache Kafka", + "streaming" ), /** * Tracing service. */ TRACING( - "Tracing", - "Provides integration with Zipkin and Jaeger (via the Open Tracing API)", - "tracing" + "Tracing", + "Provides integration with Zipkin and Jaeger (via the Open Tracing API)", + "tracing" ), /** * For testing. */ TESTING( - "Testing", - "A service used only for testing" + "Testing", + "A service used only for testing" ); private static final GcnService[] SUPPORTED; diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/BuildGradlePostProcessor.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/BuildGradlePostProcessor.java index 0625750..d75f301 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/BuildGradlePostProcessor.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/BuildGradlePostProcessor.java @@ -16,6 +16,7 @@ package cloud.graal.gcn.template; import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.application.ApplicationType; import io.micronaut.starter.build.gradle.GradleDsl; import java.util.Objects; @@ -46,48 +47,48 @@ public class BuildGradlePostProcessor implements TemplatePostProcessor { " images = [\"${rootProject.name}-${project.name}\"]\n" + "}\n"; + private static final String DOCKER_IMAGE_NATIVE_NAME_GROOVY = + "\ntasks.named('dockerBuildNative') {\n" + + " images = [\"${rootProject.name}-${project.name}\"]\n" + + "}\n"; + private static final String DOCKER_IMAGE_NAME_KOTLIN = "\ntasks.named(\"dockerBuild\") {\n" + " images.add(\"${rootProject.name}-${project.name}\")\n" + "}\n"; + private static final String DOCKER_IMAGE_NATIVE_NAME_KOTLIN = + "\ntasks.named(\"dockerBuildNative\") {\n" + + " images.add(\"${rootProject.name}-${project.name}\")\n" + + "}\n"; + private static final Pattern VERSION = Pattern.compile(" version \".+\""); - private static final Pattern BOM_PLATFORM = Pattern.compile( - "implementation[ (](platform\\(\"cloud\\.graal\\.gcn:gcn-bom:[0-9.]+\"\\))"); - private static final String BOM_ENFORCED_PLATFORM_KOTLIN = "micronautBoms($1"; - private static final String BOM_ENFORCED_PLATFORM_GROOVY = BOM_ENFORCED_PLATFORM_KOTLIN + ')'; + private static final Pattern BOM_PLATFORM_REGEX = Pattern.compile( + "implementation[ (](platform\\(\"cloud\\.graal\\.gcn:gcn-bom:[0-9.]+\"\\))\\)?"); + + private static final String BOM_ENFORCED_PLATFORM_REPLACEMENT = "micronautBoms($1)"; private static final Pattern RESOLUTION_STRATEGY_REGEX = Pattern.compile( "(?s)(substitute\\(module\\(\"io\\.micronaut.+\"\\)\\).*\\.using\\(module\\(\"io\\.micronaut.+:[0-9.]+)(\"\\)\\))"); private static final String RESOLUTION_STRATEGY_REPLACEMENT = String.format("$1%s$2", BOM_VERSION_SUFFIX); - private static final String TEST_RESOURCES_PLUGIN = "id(\"io.micronaut.test-resources\")"; - private static final String TEST_RESOURCES_WORKAROUND_GROOVY = "\n" + - "afterEvaluate {\n" + - " def devOnlyConstraints = configurations.developmentOnly.dependencyConstraints\n" + - " devOnlyConstraints.removeAll(devOnlyConstraints.findAll {\n" + - " it.group == 'io.micronaut'\n" + - " })\n" + - "}\n"; - private static final String TEST_RESOURCES_WORKAROUND_KOTLIN = "\n" + - "afterEvaluate {\n" + - " val devOnlyConstraints = configurations.developmentOnly.dependencyConstraints\n" + - " devOnlyConstraints.removeAll(devOnlyConstraints.filter {\n" + - " it.group.equals(\"io.micronaut\")\n" + - " }.toSet())\n" + - "}\n"; - private final GradleDsl dsl; private final boolean forCloudModule; + private final boolean isGatewayFunction; + private final ApplicationType applicationType; /** - * @param dsl the Gradle DSL - * @param forCloudModule true if the build.gradle is for a cloud module, not lib or platform-independent + * @param dsl the Gradle DSL + * @param forCloudModule true if the build.gradle is for a cloud module, not lib or platform-independent + * @param isGatewayFunction + * @param applicationType */ public BuildGradlePostProcessor(@NonNull GradleDsl dsl, - boolean forCloudModule) { + boolean forCloudModule, boolean isGatewayFunction, ApplicationType applicationType) { + this.isGatewayFunction = isGatewayFunction; + this.applicationType = applicationType; Objects.requireNonNull(dsl, "Gradle DSL is required"); this.dsl = dsl; this.forCloudModule = forCloudModule; @@ -97,13 +98,15 @@ public BuildGradlePostProcessor(@NonNull GradleDsl dsl, @Override public String process(@NonNull String buildGradle) { buildGradle = updateVersion(buildGradle); - if (forCloudModule) { + if (forCloudModule && applicationType == ApplicationType.DEFAULT && !isGatewayFunction) { buildGradle = configureDockerImageName(buildGradle); } + if (forCloudModule && applicationType == ApplicationType.DEFAULT && !isGatewayFunction) { + buildGradle = configureDockerNativeImageName(buildGradle); + } buildGradle = removePluginVersions(buildGradle); buildGradle = makeBomEnforced(buildGradle); buildGradle = updateResolutionStrategyVersions(buildGradle); - buildGradle = applyTestResourcesWorkaround(buildGradle); return buildGradle; } @@ -121,6 +124,15 @@ private String configureDockerImageName(@NonNull String buildGradle) { } } + @NonNull + private String configureDockerNativeImageName(@NonNull String buildGradle) { + if (dsl == GROOVY) { + return buildGradle.contains(DOCKER_IMAGE_NATIVE_NAME_GROOVY) ? buildGradle : buildGradle + DOCKER_IMAGE_NATIVE_NAME_GROOVY; + } else { + return buildGradle.contains(DOCKER_IMAGE_NATIVE_NAME_KOTLIN) ? buildGradle : buildGradle + DOCKER_IMAGE_NATIVE_NAME_KOTLIN; + } + } + @NonNull private String removePluginVersions(@NonNull String buildGradle) { return VERSION.matcher(buildGradle).replaceAll(""); @@ -128,7 +140,7 @@ private String removePluginVersions(@NonNull String buildGradle) { @NonNull private String makeBomEnforced(@NonNull String buildGradle) { - return BOM_PLATFORM.matcher(buildGradle).replaceFirst(dsl == GROOVY ? BOM_ENFORCED_PLATFORM_GROOVY : BOM_ENFORCED_PLATFORM_KOTLIN); + return BOM_PLATFORM_REGEX.matcher(buildGradle).replaceFirst(BOM_ENFORCED_PLATFORM_REPLACEMENT); } @NonNull @@ -136,12 +148,4 @@ private String updateResolutionStrategyVersions(@NonNull String buildGradle) { return RESOLUTION_STRATEGY_REGEX.matcher(buildGradle).replaceAll(RESOLUTION_STRATEGY_REPLACEMENT); } - @NonNull - private String applyTestResourcesWorkaround(@NonNull String buildGradle) { - // TODO remove this after updating to Micronaut 4.x - the 4.x plugin doesn't need the workaround - if (buildGradle.contains(TEST_RESOURCES_PLUGIN) && !buildGradle.contains("def devOnlyConstraints")) { - buildGradle += dsl == GROOVY ? TEST_RESOURCES_WORKAROUND_GROOVY : TEST_RESOURCES_WORKAROUND_KOTLIN; - } - return buildGradle; - } } diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/GcnPropertiesTemplate.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/GcnPropertiesTemplate.java new file mode 100644 index 0000000..23cc69f --- /dev/null +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/GcnPropertiesTemplate.java @@ -0,0 +1,94 @@ +/* + * Copyright 2017-2022 Oracle and/or its affiliates + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cloud.graal.gcn.template; + +import io.micronaut.starter.template.DefaultTemplate; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +public class GcnPropertiesTemplate extends DefaultTemplate { + + private final Properties properties; + + private final Map originalConfig; + + public GcnPropertiesTemplate(String path, Map config) { + this(DEFAULT_MODULE, path, config); + } + + public GcnPropertiesTemplate(String module, String path, Map config) { + super(module, path); + originalConfig = config; + this.properties = transform(new LinkedProperties(), "", config); + } + + @Override + public void write(OutputStream outputStream) throws IOException { + properties.store(outputStream, null); + } + + public Map getOriginalConfig() { + return originalConfig; + } + + private Properties transform(Properties finalConfig, String prefix, Map config) { + for (Map.Entry entry : config.entrySet()) { + transform(finalConfig, prefix + entry.getKey(), entry.getValue()); + } + return finalConfig; + } + + private void transform(Properties finalConfig, String prefix, Object value) { + if (value instanceof Map) { + transform(finalConfig, prefix + ".", (Map) value); + } else if (value instanceof List) { + List list = (List) value; + for (int i = 0; i < list.size(); i++) { + transform(finalConfig, prefix + "[" + i + "]", list.get(i)); + } + } else { + finalConfig.put(prefix, value.toString()); + } + } + + public class LinkedProperties extends Properties { + private final HashSet keys = new LinkedHashSet<>(); + + public LinkedProperties() { + } + + public Iterable orderedKeys() { + return Collections.list(keys()); + } + + public Enumeration keys() { + return Collections.enumeration(keys); + } + + public Object put(Object key, Object value) { + keys.add(key); + return super.put(key, value); + } + } +} diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/GcnYamlTemplate.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/GcnYamlTemplate.java index 86e3bcf..6a8ce8d 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/GcnYamlTemplate.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/GcnYamlTemplate.java @@ -83,6 +83,7 @@ public void write(OutputStream outputStream) throws IOException { /** * Convert entries like "com.foo.bar: wahoo" to nested. + * * @param config the initial config * @return the config nested */ diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/LogbackXmlPostProcessor.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/LogbackXmlPostProcessor.java index 97d3100..be7faf6 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/LogbackXmlPostProcessor.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/LogbackXmlPostProcessor.java @@ -21,6 +21,7 @@ /** * Disables jansi in platform-independent logback.xml. + * Since Micronaut 4.0.0 the withJansi property has not been provided. * * @since 1.0.0 */ diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/MavenPlatformPostProcessor.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/MavenPlatformPostProcessor.java new file mode 100644 index 0000000..c8bc1b3 --- /dev/null +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/MavenPlatformPostProcessor.java @@ -0,0 +1,55 @@ +/* + * Copyright 2023 Oracle and/or its affiliates + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cloud.graal.gcn.template; + +import io.micronaut.core.annotation.NonNull; +import io.micronaut.starter.util.VersionInfo; + +import java.util.regex.Pattern; + +import static cloud.graal.gcn.GcnUtils.BOM_VERSION_SUFFIX; + +/** + * MavenPlatformIndependentPostProcessor fixes parent element in platform idependent pom.xml and multimodule root pom.xml + */ +public class MavenPlatformPostProcessor implements TemplatePostProcessor { + + private static final String PARENT_END = " "; + private static final String PARENT_START = " "; + private static final Pattern VERSION_PATTERN = Pattern.compile(".+"); + + public MavenPlatformPostProcessor() { + } + + @NonNull + @Override + public String process(@NonNull String pom) { + pom = fixParent(pom); + return pom; + } + + @NonNull + private String fixParent(@NonNull String pom) { + int start = pom.indexOf(PARENT_START); + int end = pom.indexOf(PARENT_END, start) + PARENT_END.length(); + String top = pom.substring(0, start); + String bottom = pom.substring(end); + String parent = pom.substring(start, end); + parent = VERSION_PATTERN.matcher(parent).replaceAll(String.format("%s", VersionInfo.getMicronautVersion() + BOM_VERSION_SUFFIX)); + return top + parent + bottom; + } + +} diff --git a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/MavenPomPostProcessor.java b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/MavenPomPostProcessor.java index 7e1fe93..849dd7d 100644 --- a/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/MavenPomPostProcessor.java +++ b/gcn/gcn-core/src/main/java/cloud/graal/gcn/template/MavenPomPostProcessor.java @@ -88,7 +88,6 @@ public String process(@NonNull String pom) { pom = fixParent(pom); pom = fixVersion(pom); - pom = fixTestResourcesVersion(pom); pom = fixMicronautVersion(pom); if (libModule) { @@ -99,6 +98,8 @@ public String process(@NonNull String pom) { pom = addDefaultDockerImageName(pom); } } + pom = fixName(pom); + pom = fixDefaultBaseImage(pom); return pom; } @@ -113,12 +114,17 @@ private String fixParent(@NonNull String pom) { String parent = pom.substring(start, end); parent = parent.replace("io.micronaut", "" + groupId + ""); + parent = parent.replace("io.micronaut.platform", "" + groupId + ""); parent = parent.replace("micronaut-parent", "" + artifactId + "-parent"); parent = VERSION_PATTERN.matcher(parent).replaceAll("1.0-SNAPSHOT"); return top + parent + bottom; } + private String fixName(@NonNull String pom) { + return pom.replace("${packaging}", "${packaging}\n " + artifactId + "-${artifactId}"); + } + @NonNull private String fixVersion(@NonNull String pom) { return pom.replaceFirst("0.1", "1.0-SNAPSHOT"); @@ -157,6 +163,33 @@ private String fixProcessingModule(@NonNull String pom) { return top + LIB_MODULE + bottom; } + @NonNull + // TODO: remove when base image is updated inside maven plugin + private String fixDefaultBaseImage(@NonNull String pom) { + int start = pom.indexOf("micronaut-maven-plugin"); + if (start == -1) { + return pom; + } + int end = pom.indexOf(ARTIFACT_ID_END, start) + ARTIFACT_ID_END.length(); + + String top = pom.substring(0, start); + String bottom = pom.substring(end); + if (bottom.trim().startsWith("\n")) { + end = bottom.indexOf("") + "".length(); + bottom = bottom.substring(end); + return top + """ +micronaut-maven-plugin + + frolvlad/alpine-glibc:alpine-3.16""" + bottom; + } + + return top + """ +micronaut-maven-plugin + + frolvlad/alpine-glibc:alpine-3.16 + """ + bottom; + } + @NonNull private String addDefaultDockerImageName(@NonNull String pom) { if (!pom.contains(PLUGINS_START)) { @@ -169,24 +202,13 @@ private String addDefaultDockerImageName(@NonNull String pom) { " jib-maven-plugin\n" + " \n" + " \n" + - " ${project.parent.artifactId}-${project.artifactId}\n" + + " ${project.name}\n" + " \n" + " \n" + " \n"); return pom; } - // TODO remove this once we upgrade to a version of Micronaut that uses this plugin version or higher - @NonNull - private String fixTestResourcesVersion(@NonNull String pom) { - if (!pom.contains("")) { - String enabledElement = "true"; - pom = pom.replace(enabledElement, enabledElement + "\n " + - "1.2.5"); - } - return pom; - } - @NonNull private String fixMicronautVersion(@NonNull String pom) { diff --git a/gcn/gcn-core/src/main/resources/gcn_bom/gcn-bom-1.0.pom b/gcn/gcn-core/src/main/resources/gcn_bom/gcn-bom-1.0.pom new file mode 100644 index 0000000..bd73e04 --- /dev/null +++ b/gcn/gcn-core/src/main/resources/gcn_bom/gcn-bom-1.0.pom @@ -0,0 +1,1189 @@ + + + + + + + + 4.0.0 + cloud.graal.gcn + gcn-bom + 1.0 + pom + GCN + Graal Cloud Native + https://micronaut.io + + + The Apache Software License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + scm:git@github.com:micronaut-projects/micronaut-core.git + scm:git@github.com:micronaut-projects/micronaut-core.git + scm:git@github.com:micronaut-projects/micronaut-core.git + + + + graemerocher + Graeme Rocher + + + + 1.0.150 + 2.8.2 + 3.17.1 + 4.7.2-oracle-00001 + 3.8.1-oracle-00001 + 4.4.1-oracle-00001 + 1.5.0-oracle-00001 + 1.1.1-oracle-00001 + 4.5.4-oracle-00001 + 5.4.1-oracle-00001 + 3.2.0-oracle-00001 + 2.3.4-oracle-00001 + 4.8.4-oracle-00001 + 3.5.0-oracle-00001 + 4.6.0-oracle-00001 + 3.9.2-oracle-00001 + 3.9.6-oracle-00001 + 4.2.0-oracle-00001 + 5.6.0-oracle-00001 + 1.1.0-oracle-00001 + 1.5.0-oracle-00001 + 2.4.0-oracle-00001 + 4.7.2-oracle-00001 + 3.8.5-oracle-00001 + 3.2.0-oracle-00001 + 2.5.0-oracle-00001 + 3.4.0-oracle-00001 + 4.3.0-oracle-00001 + 3.4.1-oracle-00001 + 4.5.1 + 4.1.87.Final + 3.9.0 + + + + + com.fnproject.fn + api + ${fnproject.version} + + + com.fnproject.fn + runtime + ${fnproject.version} + + + com.fnproject.fn + testing-junit4 + ${fnproject.version} + + + com.oracle.oci.sdk + oci-java-sdk-circuitbreaker + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-common + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-audit + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-containerengine + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-core + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-database + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-dns + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-email + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-filestorage + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-identity + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-loadbalancer + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-objectstorage + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-addons-resteasy-client-configurator + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-addons-sasl + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-addons-graalvm + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-resourcesearch + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-addons-apache + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-keymanagement + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-announcementsservice + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-healthchecks + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-waas + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-streaming + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-resourcemanager + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-monitoring + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-ons + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-autoscaling + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-budget + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-workrequests + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-limits + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-functions + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-events + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-dts + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-oce + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-oda + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-analytics + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-integration + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-osmanagement + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-marketplace + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-apigateway + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-applicationmigration + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-datacatalog + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-dataflow + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-datascience + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-nosql + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-secrets + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-vault + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-bds + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-encryption + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-cims + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-datasafe + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-mysql + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-dataintegration + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-ocvp + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-usageapi + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-blockchain + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-loggingingestion + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-logging + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-loganalytics + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-managementdashboard + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-sch + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-loggingsearch + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-managementagent + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-cloudguard + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-opsi + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-computeinstanceagent + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-optimizer + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-tenantmanagercontrolplane + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-rover + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-databasemanagement + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-artifacts + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-apmsynthetics + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-goldengate + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-apmcontrolplane + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-apmtraces + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-networkloadbalancer + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-vulnerabilityscanning + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-databasemigration + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-servicecatalog + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-ailanguage + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-operatoraccesscontrol + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-bastion + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-genericartifactscontent + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-jms + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-devops + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-aianomalydetection + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-datalabelingservice + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-datalabelingservicedataplane + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-apmconfig + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-waf + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-certificates + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-certificatesmanagement + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-usage + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-databasetools + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-servicemanagerproxy + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-appmgmtcontrol + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-ospgateway + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-identitydataplane + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-visualbuilder + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-osubusage + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-osubsubscription + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-osuborganizationsubscription + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-osubbillingschedule + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-dashboardservice + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-threatintelligence + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-aivision + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-aispeech + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-dataconnectivity + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-stackmonitoring + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-servicemesh + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-adm + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-licensemanager + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-onesubscription + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-governancerulescontrolplane + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-waa + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-networkfirewall + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-vnmonitoring + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-emwarehouse + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-lockbox + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-fusionapps + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-mediaservices + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-opa + ${oci.sdk.version} + + + com.oracle.oci.sdk + oci-java-sdk-opensearch + ${oci.sdk.version} + + + io.micronaut.aws + micronaut-aws-cloudwatch-logging + ${micronaut.aws.cloudwatch.logging} + + + org.yaml + snakeyaml + + + + + io.micronaut.acme + micronaut-acme + ${micronaut.acme.version} + + + io.micronaut.discovery + micronaut-discovery-client + ${micronaut.discovery.version} + + + io.micronaut.multitenancy + micronaut-multitenancy + ${micronaut.multitenancy.version} + + + io.micronaut.openapi + micronaut-openapi + ${micronaut.openapi.version} + + + io.micronaut.sql + micronaut-jdbc + ${micronaut.sql.version} + + + io.micronaut.sql + micronaut-jdbc-tomcat + ${micronaut.sql.version} + + + io.micronaut + micronaut-aop + ${micronaut.core.version} + + + io.micronaut + micronaut-buffer-netty + ${micronaut.core.version} + + + io.micronaut + micronaut-context + ${micronaut.core.version} + + + io.micronaut + micronaut-core + ${micronaut.core.version} + + + io.micronaut + micronaut-core-reactive + ${micronaut.core.version} + + + io.micronaut + micronaut-function + ${micronaut.core.version} + + + io.micronaut + micronaut-function-client + ${micronaut.core.version} + + + io.micronaut + micronaut-function-web + ${micronaut.core.version} + + + io.micronaut + micronaut-graal + ${micronaut.core.version} + + + io.micronaut + micronaut-http + ${micronaut.core.version} + + + io.micronaut + micronaut-http-client + ${micronaut.core.version} + + + io.micronaut + micronaut-http-client-core + ${micronaut.core.version} + + + io.micronaut + micronaut-http-netty + ${micronaut.core.version} + + + io.micronaut + micronaut-http-server + ${micronaut.core.version} + + + io.micronaut + micronaut-http-server-netty + ${micronaut.core.version} + + + io.micronaut + micronaut-http-server-tck + ${micronaut.core.version} + + + io.micronaut + micronaut-http-validation + ${micronaut.core.version} + + + io.micronaut + micronaut-inject + ${micronaut.core.version} + + + io.micronaut + micronaut-inject-groovy + ${micronaut.core.version} + + + io.micronaut + micronaut-inject-java + ${micronaut.core.version} + + + io.micronaut + micronaut-inject-kotlin-test + ${micronaut.core.version} + + + io.micronaut + micronaut-jackson-core + ${micronaut.core.version} + + + io.micronaut + micronaut-jackson-databind + ${micronaut.core.version} + + + io.micronaut + micronaut-json-core + ${micronaut.core.version} + + + io.micronaut + micronaut-management + ${micronaut.core.version} + + + io.micronaut + micronaut-messaging + ${micronaut.core.version} + + + io.micronaut + micronaut-parent + ${micronaut.core.version} + + + io.micronaut + micronaut-router + ${micronaut.core.version} + + + io.micronaut + micronaut-runtime + ${micronaut.core.version} + + + io.micronaut + micronaut-session + ${micronaut.core.version} + + + io.micronaut + micronaut-validation + ${micronaut.core.version} + + + io.micronaut + micronaut-websocket + ${micronaut.core.version} + + + io.micronaut.cache + micronaut-cache-core + ${micronaut.cache.version} + + + io.micronaut.data + micronaut-data-bom + ${micronaut.data.version} + pom + import + + + io.micronaut.email + micronaut-email-javamail + ${micronaut.email.version} + + + io.micronaut.email + micronaut-email-javamail-composer + ${micronaut.email.version} + + + io.micronaut.flyway + micronaut-flyway-bom + ${micronaut.flyway.version} + pom + import + + + io.micronaut.jaxrs + micronaut-jaxrs-bom + ${micronaut.jaxrs.version} + pom + import + + + io.micronaut.kafka + micronaut-kafka + ${micronaut.kafka.version} + + + io.micronaut.kubernetes + micronaut-kubernetes-bom + ${micronaut.kubernetes.version} + pom + import + + + io.micronaut.liquibase + micronaut-liquibase-bom + ${micronaut.liquibase.version} + pom + import + + + io.micronaut.micrometer + micronaut-micrometer-core + ${micronaut.micrometer.version} + + + io.micronaut.mongodb + micronaut-mongo-bom + ${micronaut.mongo.version} + pom + import + + + io.micronaut.objectstorage + micronaut-object-storage-aws + ${micronaut.object.storage.version} + + + io.micronaut.objectstorage + micronaut-object-storage-core + ${micronaut.object.storage.version} + + + io.micronaut.objectstorage + micronaut-object-storage-oracle-cloud + ${micronaut.object.storage.version} + + + io.micronaut.openapi + micronaut-openapi-bom + ${micronaut.openapi.version} + pom + import + + + io.micronaut.oraclecloud + micronaut-oraclecloud-atp + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-common + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-function + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-function-http + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-function-http-test + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-httpclient-netty + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-logging + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-micrometer + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-sdk + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-sdk-reactor + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-sdk-rxjava2 + ${micronaut.oraclecloud.version} + + + io.micronaut.oraclecloud + micronaut-oraclecloud-vault + ${micronaut.oraclecloud.version} + + + io.micronaut.picocli + micronaut-picocli-bom + ${micronaut.picocli.version} + pom + import + + + io.micronaut.reactor + micronaut-reactor-bom + ${micronaut.reactor.version} + pom + import + + + io.micronaut.security + micronaut-security-bom + ${micronaut.security.version} + pom + import + + + io.micronaut.serde + micronaut-serde-bom + ${micronaut.serialization.version} + pom + import + + + io.micronaut.sql + micronaut-sql-bom + ${micronaut.sql.version} + pom + import + + + io.micronaut.spring + micronaut-spring-bom + ${micronaut.spring.version} + pom + import + + + io.micronaut.tracing + micronaut-tracing-annotation + ${micronaut.tracing.version} + + + io.micronaut.tracing + micronaut-tracing-core + ${micronaut.tracing.version} + + + io.micronaut.tracing + micronaut-tracing-opentelemetry + ${micronaut.tracing.version} + + + io.micronaut.tracing + micronaut-tracing-opentelemetry-annotation + ${micronaut.tracing.version} + + + io.micronaut.tracing + micronaut-tracing-opentelemetry-http + ${micronaut.tracing.version} + + + io.micronaut.tracing + micronaut-tracing-zipkin + ${micronaut.tracing.version} + + + io.netty + netty-buffer + ${netty.version} + + + io.netty + netty-codec-http + ${netty.version} + + + io.netty + netty-codec-http2 + ${netty.version} + + + io.netty + netty-handler + ${netty.version} + + + io.netty + netty-handler-proxy + ${netty.version} + + + io.netty + netty-transport-native-epoll + ${netty.version} + + + io.netty + netty-transport-native-kqueue + ${netty.version} + + + io.netty + netty-transport-native-unix-common + ${netty.version} + + + org.apache.kafka + kafka-clients + ${kafka.version} + + + com.github.luben + zstd-jni + + + org.lz4 + lz4-java + + + org.xerial.snappy + snappy-java + + + org.slf4j + slf4j-api + + + + + org.apache.kafka + kafka-streams + ${kafka.version} + + + + \ No newline at end of file diff --git a/gcn/gcn-core/src/main/resources/gcn_bom/gcn-bom-2.0.pom b/gcn/gcn-core/src/main/resources/gcn_bom/gcn-bom-2.0.pom new file mode 100644 index 0000000..3a47bb1 --- /dev/null +++ b/gcn/gcn-core/src/main/resources/gcn_bom/gcn-bom-2.0.pom @@ -0,0 +1,445 @@ + + + + + + + + 4.0.0 + cloud.graal.gcn + gcn-bom + 2.0 + pom + GCN + Graal Cloud Native + https://micronaut.io + + + The Apache Software License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + scm:git@github.com:micronaut-projects/micronaut-core.git + scm:git@github.com:micronaut-projects/micronaut-core.git + scm:git@github.com:micronaut-projects/micronaut-core.git + + + + graemerocher + Graeme Rocher + + + + 4.0.4 + 5.0.1-oracle-00001 + 5.0.2-oracle-00001 + 2.0.2-oracle-00001 + 5.0.2-oracle-00001 + 6.0.1-oracle-00001 + 4.0.1-oracle-00001 + 3.0.4-oracle-00001 + 5.0.1-oracle-00001 + 4.0.1-oracle-00001 + 5.0.1-oracle-00001 + 4.0.3-oracle-00001 + 4.0.4-oracle-00001 + 6.0.1-oracle-00001 + 2.0.3-oracle-00001 + 2.0.2-oracle-00001 + 5.0.1-oracle-00001 + 4.0.3-oracle-00001 + 3.0.1-oracle-00001 + 4.0.1-oracle-00001 + 5.0.1-oracle-00001 + 5.0.1-oracle-00001 + 4.0.1-oracle-00001 + + + + + io.micronaut.discovery + micronaut-discovery-client + ${micronaut.discovery.version} + + + io.micronaut.openapi + micronaut-openapi + ${micronaut.openapi.version} + + + io.micronaut.sql + micronaut-jdbc + ${micronaut.sql.version} + + + io.micronaut.sql + micronaut-jdbc-tomcat + ${micronaut.sql.version} + + + io.micronaut + micronaut-aop + ${micronaut.core.version} + + + io.micronaut + micronaut-buffer-netty + ${micronaut.core.version} + + + io.micronaut + micronaut-context + ${micronaut.core.version} + + + io.micronaut + micronaut-core + ${micronaut.core.version} + + + io.micronaut + micronaut-core-reactive + ${micronaut.core.version} + + + io.micronaut + micronaut-function + ${micronaut.core.version} + + + io.micronaut + micronaut-function-client + ${micronaut.core.version} + + + io.micronaut + micronaut-function-web + ${micronaut.core.version} + + + io.micronaut + micronaut-graal + ${micronaut.core.version} + + + io.micronaut + micronaut-http + ${micronaut.core.version} + + + io.micronaut + micronaut-http-client + ${micronaut.core.version} + + + io.micronaut + micronaut-http-client-core + ${micronaut.core.version} + + + io.micronaut + micronaut-http-netty + ${micronaut.core.version} + + + io.micronaut + micronaut-http-server + ${micronaut.core.version} + + + io.micronaut + micronaut-http-server-netty + ${micronaut.core.version} + + + io.micronaut + micronaut-http-server-tck + ${micronaut.core.version} + + + io.micronaut + micronaut-http-validation + ${micronaut.core.version} + + + io.micronaut + micronaut-inject + ${micronaut.core.version} + + + io.micronaut + micronaut-inject-groovy + ${micronaut.core.version} + + + io.micronaut + micronaut-inject-java + ${micronaut.core.version} + + + io.micronaut + micronaut-inject-kotlin-test + ${micronaut.core.version} + + + io.micronaut + micronaut-jackson-core + ${micronaut.core.version} + + + io.micronaut + micronaut-jackson-databind + ${micronaut.core.version} + + + io.micronaut + micronaut-json-core + ${micronaut.core.version} + + + io.micronaut + micronaut-management + ${micronaut.core.version} + + + io.micronaut + micronaut-messaging + ${micronaut.core.version} + + + io.micronaut.platform + micronaut-parent + ${micronaut.core.version} + pom + + + io.micronaut + micronaut-core-bom + ${micronaut.core.version} + pom + + + io.micronaut + micronaut-router + ${micronaut.core.version} + + + io.micronaut + micronaut-runtime + ${micronaut.core.version} + + + io.micronaut + micronaut-session + ${micronaut.core.version} + + + io.micronaut + micronaut-websocket + ${micronaut.core.version} + + + io.micronaut.cache + micronaut-cache-core + ${micronaut.cache.version} + + + io.micronaut.data + micronaut-data-bom + ${micronaut.data.version} + pom + import + + + io.micronaut.email + micronaut-email-javamail + ${micronaut.email.version} + + + io.micronaut.email + micronaut-email-javamail-composer + ${micronaut.email.version} + + + io.micronaut.flyway + micronaut-flyway-bom + ${micronaut.flyway.version} + pom + import + + + io.micronaut.jaxrs + micronaut-jaxrs-bom + ${micronaut.jaxrs.version} + pom + import + + + io.micronaut.kafka + micronaut-kafka + ${micronaut.kafka.version} + + + io.micronaut.kubernetes + micronaut-kubernetes-bom + ${micronaut.kubernetes.version} + pom + import + + + io.micronaut.liquibase + micronaut-liquibase-bom + ${micronaut.liquibase.version} + pom + import + + + io.micronaut.micrometer + micronaut-micrometer-core + ${micronaut.micrometer.version} + + + io.micronaut.mongodb + micronaut-mongo-bom + ${micronaut.mongo.version} + pom + import + + + io.micronaut.objectstorage + micronaut-object-storage-aws + ${micronaut.object.storage.version} + + + io.micronaut.objectstorage + micronaut-object-storage-core + ${micronaut.object.storage.version} + + + io.micronaut.objectstorage + micronaut-object-storage-oracle-cloud + ${micronaut.object.storage.version} + + + io.micronaut.openapi + micronaut-openapi-bom + ${micronaut.openapi.version} + pom + import + + + io.micronaut.oraclecloud + micronaut-oraclecloud-bom + ${micronaut.oraclecloud.version} + pom + import + + + io.micronaut.picocli + micronaut-picocli-bom + ${micronaut.picocli.version} + pom + import + + + io.micronaut.reactor + micronaut-reactor-bom + ${micronaut.reactor.version} + pom + import + + + io.micronaut.security + micronaut-security-bom + ${micronaut.security.version} + pom + import + + + io.micronaut.serde + micronaut-serde-bom + ${micronaut.serialization.version} + pom + import + + + io.micronaut.sql + micronaut-sql-bom + ${micronaut.sql.version} + pom + import + + + io.micronaut.tracing + micronaut-tracing-annotation + ${micronaut.tracing.version} + + + io.micronaut.tracing + tracing-brave-http + ${micronaut.tracing.version} + + + io.micronaut.tracing + tracing-brave + ${micronaut.tracing.version} + + + io.micronaut.tracing + micronaut-tracing-core + ${micronaut.tracing.version} + + + io.micronaut.tracing + micronaut-tracing-opentelemetry + ${micronaut.tracing.version} + + + io.micronaut.tracing + micronaut-tracing-opentelemetry-annotation + ${micronaut.tracing.version} + + + io.micronaut.tracing + micronaut-tracing-opentelemetry-http + ${micronaut.tracing.version} + + + io.micronaut.tracing + tracing-opentelemetry-kafka + ${micronaut.tracing.version} + + + io.micronaut.tracing + tracing-opentelemetry-zipkin-exporter + ${micronaut.tracing.version} + + + io.micronaut.tracing + tracing-opentracing + ${micronaut.tracing.version} + + + io.micronaut.tracing + tracing-zipkin-http-client + ${micronaut.tracing.version} + + + io.micronaut.validation + micronaut-validation-bom + ${micronaut.validation.version} + pom + import + + + io.micronaut.aws + micronaut-aws-cloudwatch-logging + ${micronaut.aws.cloudwatch.logging} + + + + \ No newline at end of file diff --git a/gcn/gcn-core/src/main/resources/gcn_gradle/gradlew b/gcn/gcn-core/src/main/resources/gcn_gradle/gradlew deleted file mode 100755 index 65dcd68..0000000 --- a/gcn/gcn-core/src/main/resources/gcn_gradle/gradlew +++ /dev/null @@ -1,244 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/gcn/gcn-core/src/main/resources/gcn_gradle/gradlew.bat b/gcn/gcn-core/src/main/resources/gcn_gradle/gradlew.bat deleted file mode 100644 index 6689b85..0000000 --- a/gcn/gcn-core/src/main/resources/gcn_gradle/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/gcn/gcn-core/src/main/resources/gcn_gradle/wrapper/gradle-wrapper.jar b/gcn/gcn-core/src/main/resources/gcn_gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 943f0cb..0000000 Binary files a/gcn/gcn-core/src/main/resources/gcn_gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/gcn/gcn-core/src/main/resources/gcn_gradle/wrapper/gradle-wrapper.properties b/gcn/gcn-core/src/main/resources/gcn_gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index f398c33..0000000 --- a/gcn/gcn-core/src/main/resources/gcn_gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip -networkTimeout=10000 -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gcn/gradle/libs.versions.toml b/gcn/gradle/libs.versions.toml index 2b7cb5e..33d8c83 100644 --- a/gcn/gradle/libs.versions.toml +++ b/gcn/gradle/libs.versions.toml @@ -17,36 +17,37 @@ [versions] bouncycastle = '1.70' docker = '3.2.13' -groovy = '3.0.13' # TODO keep in sync when changing Micronaut version +groovy = '4.0.13' # TODO keep in sync when changing Micronaut version jansi = '2.4.0' jline = '3.23.0' -micronaut-plugins = '3.6.0' # TODO keep in sync when changing Micronaut version -nohttp = '0.0.10' +logback = "1.4.8" +micronaut-plugins = '4.0.3' # TODO keep in sync when changing Micronaut version +nohttp = '0.0.11' reflections = '0.10.2' rocker = '1.3.0' -shadow = '7.1.2' +shadow = '8.1.1' slf4j = '1.7.36' -spotless = '6.10.0' +spotless = '6.10.0' #6.20.0 ??? test-logger = '3.2.0' [libraries] -bouncycastle-bcprov = { module = 'org.bouncycastle:bcprov-jdk15on', version.ref = 'bouncycastle' } bouncycastle-bcpkix = { module = 'org.bouncycastle:bcpkix-jdk15on', version.ref = 'bouncycastle' } +bouncycastle-bcprov = { module = 'org.bouncycastle:bcprov-jdk15on', version.ref = 'bouncycastle' } docker = { module = 'com.github.docker-java:docker-java-core', version.ref = 'docker' } docker-transport = { module = 'com.github.docker-java:docker-java-transport-zerodep', version.ref = 'docker' } -groovy-ant = { module = 'org.codehaus.groovy:groovy-ant', version.ref = 'groovy' } -groovy-xml = { module = 'org.codehaus.groovy:groovy-xml', version.ref = 'groovy' } +groovy-ant = { module = 'org.apache.groovy:groovy-ant', version.ref = 'groovy' } +groovy-json = { module = 'org.apache.groovy:groovy-json', version.ref = 'groovy' } +groovy-xml = { module = 'org.apache.groovy:groovy-xml', version.ref = 'groovy' } jansi = { module = 'org.fusesource.jansi:jansi', version.ref = 'jansi' } jline = { module = 'org.jline:jline', version.ref = 'jline' } jul-slf4j = { module = 'org.slf4j:jul-to-slf4j', version.ref = 'slf4j' } +logback-classic = { module = 'ch.qos.logback:logback-classic', version.ref = 'logback' } +micronaut-application = { module = 'io.micronaut.gradle:micronaut-gradle-plugin', version.ref = 'micronaut-plugins' } +micronaut-library = { module = 'io.micronaut.gradle:micronaut-gradle-plugin', version.ref = 'micronaut-plugins' } nohttp = { module = 'io.spring.nohttp:nohttp-gradle', version.ref = 'nohttp' } reflections = { module = 'org.reflections:reflections', version.ref = 'reflections' } rocker = { module = 'com.fizzed:rocker-compiler', version.ref = 'rocker' } +shadow = { module = 'com.github.johnrengelman:shadow', version.ref = 'shadow' } slf4j-nop = { module = 'org.slf4j:slf4j-nop', version.ref = 'slf4j' } spotless = { module = 'com.diffplug.spotless:spotless-plugin-gradle', version.ref = 'spotless' } - -[plugins] -micronaut-application = { id = 'io.micronaut.application', version.ref = 'micronaut-plugins' } -micronaut-library = { id = 'io.micronaut.library', version.ref = 'micronaut-plugins' } -shadow = { id = 'com.github.johnrengelman.shadow', version.ref = 'shadow' } -test-logger = { id = 'com.adarshr.test-logger', version.ref = 'test-logger' } +test-logger = { module = 'com.adarshr:gradle-test-logger-plugin', version.ref = 'test-logger' } diff --git a/gcn/gradle/wrapper/gradle-wrapper.jar b/gcn/gradle/wrapper/gradle-wrapper.jar index 943f0cb..7f93135 100644 Binary files a/gcn/gradle/wrapper/gradle-wrapper.jar and b/gcn/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gcn/gradle/wrapper/gradle-wrapper.properties b/gcn/gradle/wrapper/gradle-wrapper.properties index f398c33..ac72c34 100644 --- a/gcn/gradle/wrapper/gradle-wrapper.properties +++ b/gcn/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gcn/gradlew b/gcn/gradlew index 65dcd68..0adc8e1 100755 --- a/gcn/gradlew +++ b/gcn/gradlew @@ -83,10 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in diff --git a/gcn/micronautVersion.txt b/gcn/micronautVersion.txt index 0cbfaed..aa31e71 100644 --- a/gcn/micronautVersion.txt +++ b/gcn/micronautVersion.txt @@ -1 +1 @@ -3.8.5 +4.0.3 \ No newline at end of file diff --git a/gcn/settings.gradle b/gcn/settings.gradle index 83df78e..ea2723c 100644 --- a/gcn/settings.gradle +++ b/gcn/settings.gradle @@ -35,7 +35,7 @@ dependencyResolutionManagement { } versionCatalogs { mnLibs { - from 'io.micronaut:micronaut-bom:' + micronautVersion + from 'io.micronaut.platform:micronaut-platform:' + micronautVersion } } }