| ==================================== |
| Lucene/Solr Maven build instructions |
| ==================================== |
| |
| Contents: |
| |
| A. How to use nightly Jenkins-built Lucene/Solr Maven artifacts |
| B. How to generate Maven artifacts |
| C. How to deploy Maven artifacts to a repository |
| D. How to use Maven to build Lucene/Solr |
| |
| ----- |
| |
| A. How to use nightly Jenkins-built Lucene/Solr Maven artifacts |
| |
| The most recently produced nightly Jenkins-built Lucene and Solr Maven |
| snapshot artifacts are available in the Apache Snapshot repository here: |
| |
| http://repository.apache.org/snapshots |
| |
| An example POM snippet: |
| |
| <project ...> |
| ... |
| <repositories> |
| ... |
| <repository> |
| <id>apache.snapshots</id> |
| <name>Apache Snapshot Repository</name> |
| <url>http://repository.apache.org/snapshots</url> |
| <releases> |
| <enabled>false</enabled> |
| </releases> |
| </repository> |
| |
| |
| B. How to generate Lucene/Solr Maven artifacts |
| |
| Prerequisites: OpenJDK 11+ and Ant 1.8.2+ |
| |
| Run 'ant generate-maven-artifacts' to create an internal Maven |
| repository, including POMs, binary .jars, source .jars, and javadoc |
| .jars. |
| |
| You can run the above command in three possible places: the top-level |
| directory; under lucene/; or under solr/. From the top-level directory |
| or from lucene/, the internal repository will be located at dist/maven/. |
| From solr/, the internal repository will be located at package/maven/. |
| |
| |
| C. How to deploy Maven artifacts to a repository |
| |
| Prerequisites: OpenJDK 11+ and Ant 1.8.2+ |
| |
| You can deploy targets for all of Lucene/Solr, only Lucene, or only Solr, |
| as in B. above. To deploy to a Maven repository, the command is the same |
| as in B. above, with the addition of two system properties: |
| |
| ant -Dm2.repository.id=my-repo-id \ |
| -Dm2.repository.url=http://example.org/my/repo \ |
| generate-maven-artifacts |
| |
| The repository ID given in the above command corresponds to a <server> |
| entry in either your ~/.m2/settings.xml or ~/.ant/settings.xml. See |
| <http://maven.apache.org/settings.html#Servers> for more information. |
| (Note that as of version 2.1.3, Maven Ant Tasks cannot handle encrypted |
| passwords.) |
| |
| |
| D. How to use Maven to build Lucene/Solr |
| |
| In summary, to enable Maven builds, perform the following: |
| |
| ant get-maven-poms |
| cd maven-build |
| |
| The details, followed by some example Maven commands: |
| |
| 1. Prerequisites: OpenJDK 11+ and Maven 2.2.1 or 3.X |
| |
| 2. Make sure your sources are up to date. |
| |
| 3. Copy the Maven POM templates from under dev-tools/maven/ to the |
| maven-build/ directory using the following command from the top-level |
| directory: |
| |
| ant get-maven-poms |
| |
| Note that you will need to do this whenever changes to the POM |
| templates are committed. For this reason, it's a good idea run |
| "ant get-maven-poms" after you update from origin. |
| |
| The above command copies all of the POM templates from dev-tools/maven/, |
| filling in the project version with the default "X.X-SNAPSHOT". If you |
| want the POMs and the Maven-built artifacts to have a version other than |
| the default, you can supply an alternate version on the command line |
| with the above command, e.g. "my-special-version": |
| |
| ant -Dversion=my-special-version get-maven-poms |
| |
| or to append "my-special-version" to the current base version, e.g. 5.0, |
| resulting in version "5.0-my-special-version": |
| |
| ant -Ddev.version.suffix=my-special-version get-maven-poms |
| |
| Note: if you change the version in the POMs, there is one test method |
| that will fail under maven-surefire-plugin: |
| o.a.l.index.TestCheckIndex#testLuceneConstantVersion(). It's safe to |
| @Ignore this test method, since it's just comparing the value of the |
| lucene.version system property (set in the maven-surefire-plugin |
| configuration in the lucene-core POM) against a hard-wired official |
| version (o.a.l.util.Constants.LUCENE_MAIN_VERSION). |
| |
| 4. To remove the maven-build/ directory and its contents, use the following |
| command from the top-level directory: |
| |
| ant clean-maven-build |
| |
| 5. Please keep in mind that this is just a minimal Maven build. The resulting |
| artifacts are not the same as those created by the native Ant-based build. |
| It should be fine to enable Lucene builds in several Maven-based IDEs, |
| but should never be used for Lucene/Solr production usage, as they may lack |
| optimized class files (e.g., Java 9 MR-JAR support). To install Lucene/Solr |
| in your local repository, see instructions above. |
| |
| |
| Some example Maven commands you can use after you perform the above |
| preparatory steps: |
| |
| - Compile, package, and install all binary artifacts to your local |
| repository: |
| |
| mvn install |
| |
| After compiling and packaging, but before installing each module's |
| artifact, the above command will also run all the module's tests. |
| |
| The resulting artifacts are not the same as those created by the native |
| Ant-based build. They should never be used for Lucene/Solr production |
| usage, as they may lack optimized class files (e.g., Java 9 MR-JAR |
| support). |
| |
| - Compile, package, and install all binary artifacts to your local |
| repository, without running any tests: |
| |
| mvn -DskipTests install |
| |
| - Compile, package, and install all binary and source artifacts to your |
| local repository, without running any tests: |
| |
| mvn -DskipTests source:jar-no-fork install |
| |
| - Run all tests: |
| |
| mvn test |
| |
| - Run all test methods defined in a test class: |
| |
| mvn -Dtest=TestClassName test |