rzo1 commented on code in PR #182: URL: https://github.com/apache/opennlp-addons/pull/182#discussion_r3960536511
########## dev-TEMP/addons-proposal.md: ########## @@ -0,0 +1,70 @@ +<!-- +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF 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 + + 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. +--> + +Add-ons Proposal (temporary) Review Comment: I think this file can be dropped. ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without Review Comment: We shouldnt use the term contract. Better would be "interfaces" or a reference to the api module. ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> + <para>When an add-on needs a reusable contract that core does not have yet, propose the contract as a small + core change and keep the implementation here.</para> + </section> + <section xml:id="addon-guidelines.naming"> + <title>Artifacts and packages</title> + <para>Each module is published to Maven Central as + <code>org.apache.opennlp.addons:<replaceable>artifactId</replaceable></code>. Core artifacts keep the + <code>org.apache.opennlp</code> group.</para> + <para>Module and artifact names describe the feature and carry no <code>-addon</code> suffix. Java package + names describe the feature rather than the repository it is hosted in, so that a package does not have + to be renamed if a component later moves into core. Each implementation package belongs to exactly one + module.</para> + <para>Keep published coordinates stable. If coordinates do change, ship a relocation POM for the transition Review Comment: Maven coordinates ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> + <para>When an add-on needs a reusable contract that core does not have yet, propose the contract as a small + core change and keep the implementation here.</para> + </section> + <section xml:id="addon-guidelines.naming"> + <title>Artifacts and packages</title> + <para>Each module is published to Maven Central as + <code>org.apache.opennlp.addons:<replaceable>artifactId</replaceable></code>. Core artifacts keep the + <code>org.apache.opennlp</code> group.</para> + <para>Module and artifact names describe the feature and carry no <code>-addon</code> suffix. Java package + names describe the feature rather than the repository it is hosted in, so that a package does not have + to be renamed if a component later moves into core. Each implementation package belongs to exactly one + module.</para> + <para>Keep published coordinates stable. If coordinates do change, ship a relocation POM for the transition + and verify that dependency resolution still works; previously published JARs stay available, and + consumers otherwise face duplicate classes and split packages.</para> + </section> + <section xml:id="addon-guidelines.dependencies"> + <title>Dependencies and licensing</title> + <para>Keep dependencies to a minimum. A new dependency, in core or in an add-on, draws considerably more + scrutiny from reviewers than an equivalent hand-written solution.</para> + <para>Every dependency and bundled resource needs an ASF-compatible license and recorded provenance. A module + that downloads user-selected resources documents the source, who is responsible for its license, and + how integrity is verified.</para> + </section> + <section xml:id="addon-guidelines.review"> + <title>What a pull request includes</title> + <para>Each pull request covers one module, or one focused change, and includes:</para> + <itemizedlist> + <listitem><para>tests for normal and for invalid input;</para></listitem> + <listitem><para>a manual page with dependency and usage examples;</para></listitem> + <listitem><para>the LICENSE and NOTICE changes it requires; and</para></listitem> Review Comment: These should be also automatically re-generated (as stated in my other comment) ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> + <para>When an add-on needs a reusable contract that core does not have yet, propose the contract as a small + core change and keep the implementation here.</para> + </section> + <section xml:id="addon-guidelines.naming"> + <title>Artifacts and packages</title> + <para>Each module is published to Maven Central as + <code>org.apache.opennlp.addons:<replaceable>artifactId</replaceable></code>. Core artifacts keep the + <code>org.apache.opennlp</code> group.</para> + <para>Module and artifact names describe the feature and carry no <code>-addon</code> suffix. Java package + names describe the feature rather than the repository it is hosted in, so that a package does not have + to be renamed if a component later moves into core. Each implementation package belongs to exactly one + module.</para> + <para>Keep published coordinates stable. If coordinates do change, ship a relocation POM for the transition + and verify that dependency resolution still works; previously published JARs stay available, and + consumers otherwise face duplicate classes and split packages.</para> + </section> + <section xml:id="addon-guidelines.dependencies"> + <title>Dependencies and licensing</title> + <para>Keep dependencies to a minimum. A new dependency, in core or in an add-on, draws considerably more + scrutiny from reviewers than an equivalent hand-written solution.</para> + <para>Every dependency and bundled resource needs an ASF-compatible license and recorded provenance. A module + that downloads user-selected resources documents the source, who is responsible for its license, and + how integrity is verified.</para> + </section> + <section xml:id="addon-guidelines.review"> + <title>What a pull request includes</title> + <para>Each pull request covers one module, or one focused change, and includes:</para> + <itemizedlist> + <listitem><para>tests for normal and for invalid input;</para></listitem> + <listitem><para>a manual page with dependency and usage examples;</para></listitem> + <listitem><para>the LICENSE and NOTICE changes it requires; and</para></listitem> + <listitem><para>the OpenNLP version it was verified against.</para></listitem> + </itemizedlist> + <para>A contribution that depends on an unreleased core API stays in draft and documents how to build it + locally. It is ready for review once it builds against a published Apache artifact that contains that Review Comment: OpenNLP artifact ########## src/license/NOTICE.template: ########## Review Comment: should be restored. ########## dev-TEMP/README.md: ########## @@ -0,0 +1,30 @@ +<!-- +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF 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 + + 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. +--> + +dev-TEMP Review Comment: This file can be dropped. ########## opennlp-addons-docs/src/docbkx/building.xml: ########## @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="building" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Building from Source</title> + <section xml:id="building.requirements"> + <title>Requirements</title> + <itemizedlist> + <listitem><para>JDK 21 or newer</para></listitem> + <listitem><para>Maven 3.9.6 or newer</para></listitem> + </itemizedlist> + <para>The repository does not include a Maven wrapper.</para> + </section> + <section xml:id="building.verify"> + <title>Verify every module</title> + <para>Run from the repository root:</para> + <screen><![CDATA[mvn clean verify -Dopennlp.forkCount=1]]></screen> + <para>Verification runs OpenNLP's Checkstyle rules, forbidden API checks on compiled production and test + classes, unit and integration tests, RAT license-header checks, and dependency-license reporting. + Add <code>-Pjacoco</code> to generate coverage reports.</para> + <para>Build one module and its reactor dependencies with <code>-pl</code> and <code>-am</code>:</para> + <screen><![CDATA[mvn -pl japanese -am verify -Dopennlp.forkCount=1]]></screen> + </section> + <section xml:id="building.manual"> + <title>Generate the manual</title> + <para>The manual uses the DocBook Maven Plugin, matching the established OpenNLP manual toolchain. These are + build plugins and do not become application dependencies.</para> + <para>Generate the HTML and PDF manual:</para> + <screen><![CDATA[mvn -pl opennlp-addons-docs -am package -Dopennlp.forkCount=1]]></screen> + <para>Open <code>opennlp-addons-docs/target/docbkx/html/opennlp-addons.html</code> in a browser. The PDF is + written to <code>opennlp-addons-docs/target/docbkx/pdf/opennlp-addons.pdf</code>. Use a clean build after + changing manual sources:</para> + <screen><![CDATA[mvn -pl opennlp-addons-docs -am clean package -Dopennlp.forkCount=1]]></screen> + </section> + <section xml:id="building.publication"> + <title>Maven publication</title> + <para>Each module uses the <code>org.apache.opennlp.addons</code> Maven group. The ASF parent POM supplies + the Apache staging repository (<code>apache.releases.https</code>) and snapshot repository + (<code>apache.snapshots.https</code>). Credentials belong in the release manager's Maven settings, + never in the repository.</para> + <para>The <code>apache-release</code> profile creates a buildable source archive and its SHA-512 checksum, + attaches source and Javadoc jars, and signs artifacts with GPG. Normal builds include + <code>META-INF/LICENSE</code> and <code>META-INF/NOTICE</code> in jars through the ASF resource bundle. + The dependency-license report is written to <code>target/DEPENDENCY-LICENSES</code>; it is not a + substitute for checking the contents of each distributed artifact.</para> + <para>Deployment is disabled in this branch's POM, including when <code>apache-release</code> is active. + The release plugin runs <code>verify</code> and does not push SCM changes. CI has read-only repository + permissions and does not publish artifacts. Enabling publication requires a separate reviewed + build change.</para> + <para>Check release packaging locally without signing or uploading:</para> + <screen><![CDATA[mvn clean verify -Papache-release -Dgpg.skip=true \ + -Dopennlp.forkCount=1]]></screen> + <para>The unsigned source archive and checksum are written under the root <code>target</code> directory. + These are test artifacts, not an Apache release. Before publication, a release manager must verify Review Comment: Apache -> ASF (should be adjusted in the whole doc) ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional Review Comment: cotract -> interface ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> + <para>When an add-on needs a reusable contract that core does not have yet, propose the contract as a small + core change and keep the implementation here.</para> + </section> + <section xml:id="addon-guidelines.naming"> + <title>Artifacts and packages</title> + <para>Each module is published to Maven Central as + <code>org.apache.opennlp.addons:<replaceable>artifactId</replaceable></code>. Core artifacts keep the Review Comment: Each "addon" module ... ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> Review Comment: Apache -> ASF ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> + <para>When an add-on needs a reusable contract that core does not have yet, propose the contract as a small Review Comment: contract -> interface or any other verb. "contract" is a bit claudish. ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> + <para>When an add-on needs a reusable contract that core does not have yet, propose the contract as a small + core change and keep the implementation here.</para> + </section> + <section xml:id="addon-guidelines.naming"> + <title>Artifacts and packages</title> + <para>Each module is published to Maven Central as + <code>org.apache.opennlp.addons:<replaceable>artifactId</replaceable></code>. Core artifacts keep the Review Comment: The core ... sentence can be dropped. ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> + <para>When an add-on needs a reusable contract that core does not have yet, propose the contract as a small + core change and keep the implementation here.</para> + </section> + <section xml:id="addon-guidelines.naming"> + <title>Artifacts and packages</title> + <para>Each module is published to Maven Central as + <code>org.apache.opennlp.addons:<replaceable>artifactId</replaceable></code>. Core artifacts keep the + <code>org.apache.opennlp</code> group.</para> + <para>Module and artifact names describe the feature and carry no <code>-addon</code> suffix. Java package + names describe the feature rather than the repository it is hosted in, so that a package does not have + to be renamed if a component later moves into core. Each implementation package belongs to exactly one + module.</para> + <para>Keep published coordinates stable. If coordinates do change, ship a relocation POM for the transition + and verify that dependency resolution still works; previously published JARs stay available, and + consumers otherwise face duplicate classes and split packages.</para> + </section> + <section xml:id="addon-guidelines.dependencies"> + <title>Dependencies and licensing</title> + <para>Keep dependencies to a minimum. A new dependency, in core or in an add-on, draws considerably more + scrutiny from reviewers than an equivalent hand-written solution.</para> + <para>Every dependency and bundled resource needs an ASF-compatible license and recorded provenance. A module Review Comment: Link https://www.apache.org/legal/resolved.html ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> + <para>When an add-on needs a reusable contract that core does not have yet, propose the contract as a small + core change and keep the implementation here.</para> + </section> + <section xml:id="addon-guidelines.naming"> + <title>Artifacts and packages</title> + <para>Each module is published to Maven Central as + <code>org.apache.opennlp.addons:<replaceable>artifactId</replaceable></code>. Core artifacts keep the + <code>org.apache.opennlp</code> group.</para> + <para>Module and artifact names describe the feature and carry no <code>-addon</code> suffix. Java package + names describe the feature rather than the repository it is hosted in, so that a package does not have + to be renamed if a component later moves into core. Each implementation package belongs to exactly one + module.</para> + <para>Keep published coordinates stable. If coordinates do change, ship a relocation POM for the transition + and verify that dependency resolution still works; previously published JARs stay available, and + consumers otherwise face duplicate classes and split packages.</para> + </section> + <section xml:id="addon-guidelines.dependencies"> + <title>Dependencies and licensing</title> + <para>Keep dependencies to a minimum. A new dependency, in core or in an add-on, draws considerably more + scrutiny from reviewers than an equivalent hand-written solution.</para> + <para>Every dependency and bundled resource needs an ASF-compatible license and recorded provenance. A module + that downloads user-selected resources documents the source, who is responsible for its license, and + how integrity is verified.</para> + </section> + <section xml:id="addon-guidelines.review"> + <title>What a pull request includes</title> + <para>Each pull request covers one module, or one focused change, and includes:</para> + <itemizedlist> + <listitem><para>tests for normal and for invalid input;</para></listitem> + <listitem><para>a manual page with dependency and usage examples;</para></listitem> + <listitem><para>the LICENSE and NOTICE changes it requires; and</para></listitem> + <listitem><para>the OpenNLP version it was verified against.</para></listitem> Review Comment: Should go into the PR template. ########## opennlp-addons-docs/src/docbkx/building.xml: ########## @@ -0,0 +1,122 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="building" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Building from Source</title> + <section xml:id="building.requirements"> + <title>Requirements</title> + <itemizedlist> + <listitem><para>JDK 21 or newer</para></listitem> + <listitem><para>Maven 3.9.6 or newer</para></listitem> + </itemizedlist> + <para>The repository does not include a Maven wrapper.</para> + </section> + <section xml:id="building.verify"> + <title>Verify every module</title> + <para>Run from the repository root:</para> + <screen><![CDATA[mvn clean verify -Dopennlp.forkCount=1]]></screen> + <para>Verification runs OpenNLP's Checkstyle rules, forbidden API checks on compiled production and test + classes, unit and integration tests, RAT license-header checks, and dependency-license reporting. + Add <code>-Pjacoco</code> to generate coverage reports.</para> + <para>Build one module and its reactor dependencies with <code>-pl</code> and <code>-am</code>:</para> + <screen><![CDATA[mvn -pl japanese -am verify -Dopennlp.forkCount=1]]></screen> + </section> + <section xml:id="building.manual"> + <title>Generate the manual</title> + <para>The manual uses the DocBook Maven Plugin, matching the established OpenNLP manual toolchain. These are + build plugins and do not become application dependencies.</para> + <para>Generate the HTML and PDF manual:</para> + <screen><![CDATA[mvn -pl opennlp-addons-docs -am package -Dopennlp.forkCount=1]]></screen> + <para>Open <code>opennlp-addons-docs/target/docbkx/html/opennlp-addons.html</code> in a browser. The PDF is + written to <code>opennlp-addons-docs/target/docbkx/pdf/opennlp-addons.pdf</code>. Use a clean build after + changing manual sources:</para> + <screen><![CDATA[mvn -pl opennlp-addons-docs -am clean package -Dopennlp.forkCount=1]]></screen> + </section> + <section xml:id="building.publication"> + <title>Maven publication</title> + <para>Each module uses the <code>org.apache.opennlp.addons</code> Maven group. The ASF parent POM supplies + the Apache staging repository (<code>apache.releases.https</code>) and snapshot repository + (<code>apache.snapshots.https</code>). Credentials belong in the release manager's Maven settings, + never in the repository.</para> + <para>The <code>apache-release</code> profile creates a buildable source archive and its SHA-512 checksum, + attaches source and Javadoc jars, and signs artifacts with GPG. Normal builds include + <code>META-INF/LICENSE</code> and <code>META-INF/NOTICE</code> in jars through the ASF resource bundle. + The dependency-license report is written to <code>target/DEPENDENCY-LICENSES</code>; it is not a + substitute for checking the contents of each distributed artifact.</para> + <para>Deployment is disabled in this branch's POM, including when <code>apache-release</code> is active. + The release plugin runs <code>verify</code> and does not push SCM changes. CI has read-only repository + permissions and does not publish artifacts. Enabling publication requires a separate reviewed + build change.</para> + <para>Check release packaging locally without signing or uploading:</para> + <screen><![CDATA[mvn clean verify -Papache-release -Dgpg.skip=true \ + -Dopennlp.forkCount=1]]></screen> + <para>The unsigned source archive and checksum are written under the root <code>target</code> directory. + These are test artifacts, not an Apache release. Before publication, a release manager must verify + source completeness, dependency licenses, signatures, reproducibility, and compatibility with the + selected core release. Staging and publication require the + <link xlink:href="https://infra.apache.org/publishing-maven-artifacts.html">Apache Maven release procedure</link> Review Comment: Link to https://opennlp.apache.org/release.html instead of infra ########## opennlp-addons-docs/src/docbkx/addon-guidelines.xml: ########## @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="addon-guidelines" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> + <title>Contributing an Add-on</title> + <para>This chapter describes what belongs in this repository, how add-on artifacts are named and published, and + what a contribution is expected to include.</para> + <section xml:id="addon-guidelines.boundary"> + <title>Where a component belongs</title> + <para>OpenNLP core contains shared contracts, and the implementations that fit its component model without + new runtime dependencies or bundled data.</para> + <para>An add-on implements a core contract, or supplies an independent component, when it needs additional + dependencies, models, dictionaries, datasets, or a separate release cycle. Add-ons use public OpenNLP + APIs; they do not duplicate them, bypass them, or rely on package-private access.</para> + <para>The <link xlink:href="https://github.com/apache/opennlp-sandbox">sandbox</link> remains the place for + proofs of concept, services, and work that is not ready for an Apache release.</para> + <para>When an add-on needs a reusable contract that core does not have yet, propose the contract as a small + core change and keep the implementation here.</para> + </section> + <section xml:id="addon-guidelines.naming"> + <title>Artifacts and packages</title> + <para>Each module is published to Maven Central as + <code>org.apache.opennlp.addons:<replaceable>artifactId</replaceable></code>. Core artifacts keep the + <code>org.apache.opennlp</code> group.</para> + <para>Module and artifact names describe the feature and carry no <code>-addon</code> suffix. Java package + names describe the feature rather than the repository it is hosted in, so that a package does not have + to be renamed if a component later moves into core. Each implementation package belongs to exactly one + module.</para> + <para>Keep published coordinates stable. If coordinates do change, ship a relocation POM for the transition + and verify that dependency resolution still works; previously published JARs stay available, and + consumers otherwise face duplicate classes and split packages.</para> + </section> + <section xml:id="addon-guidelines.dependencies"> + <title>Dependencies and licensing</title> + <para>Keep dependencies to a minimum. A new dependency, in core or in an add-on, draws considerably more + scrutiny from reviewers than an equivalent hand-written solution.</para> + <para>Every dependency and bundled resource needs an ASF-compatible license and recorded provenance. A module + that downloads user-selected resources documents the source, who is responsible for its license, and + how integrity is verified.</para> + </section> + <section xml:id="addon-guidelines.review"> + <title>What a pull request includes</title> + <para>Each pull request covers one module, or one focused change, and includes:</para> + <itemizedlist> + <listitem><para>tests for normal and for invalid input;</para></listitem> + <listitem><para>a manual page with dependency and usage examples;</para></listitem> + <listitem><para>the LICENSE and NOTICE changes it requires; and</para></listitem> + <listitem><para>the OpenNLP version it was verified against.</para></listitem> + </itemizedlist> + <para>A contribution that depends on an unreleased core API stays in draft and documents how to build it + locally. It is ready for review once it builds against a published Apache artifact that contains that + API.</para> + </section> + <section xml:id="addon-guidelines.releases"> + <title>Releases</title> + <para>Add-ons release on their own cadence through the normal OpenNLP vote. A release records the supported Review Comment: through the regular voting process. ########## opennlp-addons-docs/src/docbkx/opennlp-addons.xml: ########## @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<book version="5.0" xml:lang="en" + xmlns="http://docbook.org/ns/docbook" + xmlns:xi="http://www.w3.org/2001/XInclude" + xmlns:xlink="http://www.w3.org/1999/xlink"> + <info> + <releaseinfo>Version <?eval ${project.version}?></releaseinfo> + <productname>OpenNLP Add-ons</productname> Review Comment: Apache OpenNLP ########## opennlp-addons-docs/src/docbkx/using-addons.xml: ########## @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="using-addons" xmlns="http://docbook.org/ns/docbook"> + <title>Using OpenNLP Add-ons</title> + <section xml:id="using-addons.select"> + <title>Select a module</title> + <para>Each add-on is published as a separate artifact under the <code>org.apache.opennlp.addons</code> group. + Select the artifact from the <link linkend="modules">module catalog</link>. The parent + <code>opennlp-addons</code> artifact is a build POM and is not an application dependency.</para> + <programlisting language="xml"><![CDATA[<dependency> + <groupId>org.apache.opennlp.addons</groupId> + <artifactId>japanese</artifactId> + <version>${opennlp-addons.version}</version> +</dependency>]]></programlisting> + <para>Use the same add-ons version for each add-on in one application.</para> + </section> + <section xml:id="using-addons.development"> + <title>Current development versions</title> + <para>The repository version is <code>3.0.0-SNAPSHOT</code>. Most modules currently compile against OpenNLP + <code>3.0.0-M5</code>, which is set by the root <code>opennlp.version</code> property. A module that Review Comment: Can this be injected via properties? ########## opennlp-addons-docs/src/docbkx/using-addons.xml: ########## @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN" +"http://docbook.org/xml/5.0/dtd/docbook.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information regarding + copyright ownership. The ASF 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 + + 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. +--> +<chapter xml:id="using-addons" xmlns="http://docbook.org/ns/docbook"> + <title>Using OpenNLP Add-ons</title> + <section xml:id="using-addons.select"> + <title>Select a module</title> + <para>Each add-on is published as a separate artifact under the <code>org.apache.opennlp.addons</code> group. + Select the artifact from the <link linkend="modules">module catalog</link>. The parent + <code>opennlp-addons</code> artifact is a build POM and is not an application dependency.</para> + <programlisting language="xml"><![CDATA[<dependency> + <groupId>org.apache.opennlp.addons</groupId> + <artifactId>japanese</artifactId> + <version>${opennlp-addons.version}</version> +</dependency>]]></programlisting> + <para>Use the same add-ons version for each add-on in one application.</para> + </section> + <section xml:id="using-addons.development"> + <title>Current development versions</title> + <para>The repository version is <code>3.0.0-SNAPSHOT</code>. Most modules currently compile against OpenNLP Review Comment: Can the SNAPSHOT be injected via properties ? otherwise release plugin will not catch it ########## pom.xml: ########## @@ -349,6 +353,14 @@ </pluginManagement> <plugins> + <plugin> Review Comment: This is not required. ASF Parent POM handle these steps. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
