| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563 |
- ================================================================================
- 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.
- ================================================================================
- ====================================================
- Building The Apache Tomcat 8.5 Servlet/JSP Container
- ====================================================
- This subproject contains the source code for Tomcat 8.5, a container that
- implements the Servlet 3.1, JSP 2.3, EL 3.0, WebSocket 1.1 and JASPIC 1.1
- specifications from the Java Community Process <https://www.jcp.org/>.
- Note: If you just need to run Apache Tomcat, it is not necessary to build
- it. You may simply download a binary distribution. It is cross-platform.
- Read RUNNING.txt for the instruction on how to run it.
- In order to build a binary distribution version of Apache Tomcat from a
- source distribution, do the following:
- (1) Download and Install a Java Development Kit
- 1. If the JDK is already installed, skip to (2).
- 2. Download a version 7 of Java Development Kit (JDK) release (use the
- latest update available for your chosen version) from one of:
- http://www.oracle.com/technetwork/java/javase/downloads/index.html
- http://openjdk.java.net/install/index.html
- or another JDK vendor.
- Note regarding later versions of Java:
- As documented elsewhere, one of components in Apache Tomcat includes
- a private copy of the Apache Commons DBCP 2 library.
- The JDBC interfaces implemented by DBCP frequently change in non-backwards
- compatible ways between versions of the Java SE specification. Therefore,
- it is likely that DBCP 2 will only compile with the specific version of Java
- listed above and that compilation will fail if a later version of Java is
- used.
- See Apache Commons DBCP 2 project web site for more details on
- available versions of the library and its requirements,
- https://commons.apache.org/dbcp/
- 3. Install the JDK according to the instructions included with the release.
- 4. Set an environment variable JAVA_HOME to the pathname of the directory
- into which you installed the JDK release.
- (2) Install Apache Ant version 1.9.10 or later on your computer.
- 1. If Apache Ant version 1.9.10 or later is already installed on your
- computer, skip to (3).
- 2. Download a binary distribution of Ant from:
- https://ant.apache.org/bindownload.cgi
- 3. Unpack the binary distribution into a convenient location so that the
- Ant release resides in its own directory (conventionally named
- "apache-ant-[version]").
- For the purposes of the remainder of this document, the symbolic name
- "${ant.home}" is used to refer to the full pathname of the release
- directory.
- 4. Create an ANT_HOME environment variable to point the directory
- ${ant.home}.
- 5. Modify the PATH environment variable to include the directory
- ${ant.home}/bin in its list. This makes the "ant" command line script
- available, which will be used to actually perform the build.
- (3) Building Tomcat 8.5
- (3.1) Checkout or obtain the source code for Tomcat 8.5
- Clone the source using git, then checkout a specific major branch or
- master for the latest code development, or download and unpack a source
- package.
- * Tomcat GitHub repository URL:
- https://github.com/apache/tomcat
- * Source packages can be downloaded from:
- https://tomcat.apache.org/download-80.cgi
- The location where the source has been placed will be further referred as
- ${tomcat.source}.
- The Tomcat local build process does not modify line-endings. The svn repository
- is configured so that all files will be checked out with the line-ending
- appropriate for the current platform. When using a source package you should
- ensure that you use the source package that has the appropriate line-ending
- for your platform:
- zip -> CRLF
- tar.gz -> LF
- Note that the release build process does modify line-endings to ensure that
- each release package has the appropriate line-endings.
- (3.2) Building
- 1. The build is controlled by creating a ${tomcat.source}/build.properties
- file.
- It is recommended to always create the file, because of unfortunate
- default value of base.path property. You may start with the following
- content for the file:
- # ----- Default Base Path for Dependent Packages -----
- # Replace this path with the directory path where dependencies binaries
- # should be downloaded
- base.path=/home/me/some-place-to-download-to
- 2. Configure base.path property by adding it to the
- ${tomcat.source}/build.properties file.
- The base.path property specifies the place where Tomcat dependencies
- required by the build are downloaded. It is recommended to place this
- directory outside of the source tree, so that you do not waste your
- time re-downloading the libraries.
- * NOTE: The default value of the base.path property configures the build script
- to download the libraries required to build Tomcat to the
- ${user.home}/tomcat-build-libs directory.
- * NOTE: Users accessing the Internet through a proxy must use the properties
- file to indicate to Ant the proxy configuration.
- The following properties should be added to the ${tomcat.source}/build.properties
- file.
- proxy.use=true
- proxy.host=proxy.domain
- proxy.port=8080
- proxy.user=username
- proxy.password=password
- See Apache Ant documentation for the <setproxy> task for details.
- 3. Go to the sources directory and run Ant:
- cd ${tomcat.source}
- ant
- This will execute the "deploy" target in build.xml.
- Once the build has completed successfully, a usable Tomcat installation
- will have been produced in the ${tomcat.source}/output/build directory,
- and can be started and stopped with the usual scripts.
- Note that the build includes Tomcat documentation, which can be found
- in the output/build/webapps/docs directory.
- The path of the output directory can be controlled by specifying the
- "tomcat.output" property in the build.properties file.
- * NOTE: Do not run the build as the root user. Building and running Tomcat
- does not require root privileges.
- (4) Updating sources and rebuilding
- It is recommended that you regularly update the downloaded Tomcat 8.5
- sources using your git client.
- For a quick rebuild of only modified code you can use:
- cd ${tomcat.source}
- ant
- (5) Special builds
- There are several targets in Tomcat build files that are useful to be
- called separately. They build components that you may want to build
- quickly, or ones that are included in the full release and are not built
- during the default "deploy" build.
- (5.1) Building documentation
- The documentation web application is built during the default "deploy"
- build.
- It can be built quickly by using the following commands:
- cd ${tomcat.source}
- ant build-docs
- The output of this command will be found in the following directory:
- output/build/webapps/docs
- The API documentation (Javadoc) is built during a "release" build. It is
- easy to build it separately by using the following commands:
- cd ${tomcat.source}
- ant javadoc
- The output of this command will be found in the following directories:
- output/dist/webapps/docs/api
- output/dist/webapps/docs/elapi
- output/dist/webapps/docs/jspapi
- output/dist/webapps/docs/servletapi
- (5.2) Building the extras (commons-logging, webservices etc.)
- These components are documented on the "Additional Components"
- (extras.html) page of documentation. They are built during a "release"
- build.
- You can build them by using the following commands:
- cd ${tomcat.source}
- ant extras
- (5.3) Building the embedded packages
- These are built during a "release" build.
- You can build them by using the following commands:
- cd ${tomcat.source}
- ant embed
- (6) Building a full release (as provided via the ASF download pages)
- A full release includes the Windows installer which requires a Windows
- environment to be available to create it. If not building in a Windows
- environment, the build scripts assume that Wine is available. If this is not
- the case, the skip.installer property may be set to skip the creation of the
- Windows installer.
- 1. Configure GPG, if needed
- If the released artifacts have to be cryptographically signed with a
- PGP signature, like the official ASF releases are, the following
- property can be added to the build.properties file:
- # Location of GPG executable (used only for releases)
- gpg.exec=/path/to/gpg
- You do not need it if you do not plan to sign the release.
- If "gpg.exec" property does not point to an existing file, it will be
- ignored and this feature will be disabled.
- You will be prompted for the GPG passphrase when the release build
- starts, unless "gpg.passphrase" property is set.
- 2. If building the Windows installer
- If running the build in a UAC enabled environment, building the Windows
- installer requires elevated privileges. The simplest way to do this is to
- open the command prompt used for the build with the "Run as administrator"
- option.
- 3. Configure the code signing service
- ASF committers performing official releases will need to configure the code
- signing service so that the Windows installer is signed during the build
- process. The following properties need to be added to the build.properties
- file:
- # Location of GPG executable (used only for releases)
- # Code signing of Windows installer
- do.codesigning=true
- codesigning.user=request-via-pmc
- codesigning.pwd=request-via-pmc
- codesigning.partnercode=request-via-pmc
- codesigning.service=Microsoft Windows Signing
- Release managers will be provided with the necessary credentials by the PMC.
- It will also be necessary to enable TLS 1.1 and TLS 1.2 by default (they are
- disabled by default on Java 7) for the build process to communicate with the
- code signing service. The simplest way is by setting the ANT_OPTS
- environment variable. E.g. (for Windows):
- set ANT_OPTS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
- 4. Build the release:
- cd ${tomcat.source}
- ant release
- (7) Tests
- (7.1) Running Tomcat tests
- Tomcat includes a number of junit tests. The tests are not run when a
- release is built. There is separate command to run them.
- To run the testsuite use the following command:
- cd ${tomcat.source}
- ant test
- It is advisable to redirect output of the above command to a file for later
- inspection.
- The JUnit reports generated by the tests will be written to the following
- directory:
- output/build/logs
- By default the testsuite is run three times to test 3 different
- implementations of Tomcat connectors: NIO, NIO2 and APR. (If you are not
- familiar with Tomcat connectors, see config/http.html in documentation for
- details).
- The 3 runs are enabled and disabled individually by the following
- properties, which all are "true" by default:
- execute.test.nio=true
- execute.test.nio2=true
- execute.test.apr=true
- The APR connector can be tested only if Tomcat-Native library binaries are
- found by the testsuite. The "test.apr.loc" property specifies the directory
- where the library binaries are located.
- By default the "test.apr.loc" property specifies the following location:
- output/build/bin/native/
- If you are on Windows and want to test the APR connector you can put the
- tcnative-1.dll file into ${tomcat.source}/bin/native/ and it will be copied
- into the above directory when the build runs.
- The unit tests include tests of the clustering functionality which require
- multicast to be enabled. There is a simple application provided in the Tomcat
- test source (org.apache.catalina.tribes.TesterMulticast) that can be used to
- check if a machine supports multicast. Notes on enabling multicast for different
- operating systems are provided in the Javadoc for that class.
- (7.2) Running a single test
- It is possible to run a single JUnit test class by adding the "test.entry"
- property to the build.properties file. The property specifies the name of
- the test class.
- For example:
- test.entry=org.apache.catalina.util.TestServerInfo
- It is possible to further limit such run to a number of selected test
- methods by adding "test.entry.methods" property. The property specifies a
- comma-separated list of test case methods.
- For example:
- test.entry=org.apache.el.lang.TestELArithmetic
- test.entry.methods=testMultiply01,testMultiply02
- (7.3) Running a set of tests
- It is possible to run a set of JUnit test classes by adding the "test.name"
- property to the build.properties file. The property specifies an Ant
- includes pattern for the fileset of test class files to run.
- The default value is "**/Test*.java", so all test classes are being
- executed (with few exceptions - see build.xml for several exclude patterns).
- You can include multiple patterns by concatenating them with a comma (",")
- as the separator.
- For example:
- test.name=**/TestSsl.java,**/TestWebSocketFrameClientSSL.java
- You can exclude specific JUnit test classes by adding the "test.exclude"
- property to the build.properties file. The property specifies an Ant
- excludes pattern for the fileset of test class files to exclude form the run.
- The default value is empty, so no classes are excluded. The syntax is the same
- as for the property "test.name".
- (7.4) Other configuration options
- 1. It is possible to configure the directory where JUnit reports are
- written to. It is configured by "test.reports" property. The default
- value is
- output/build/logs
- 2. It is possible to enable generation of access log file when the tests
- are run. This is off by default and can be enabled by the following
- property:
- test.accesslog=true
- The "access_log.<date>" file will be written to the same directory as
- JUnit reports,
- output/build/logs
- 3. The testsuite respects logging configuration as configured by
- ${tomcat.source}/conf/logging.properties
- The log files will be written to the temporary directory used by the
- tests,
- output/test-tmp/logs
- 4. It is possible to configure formatter used by JUnit reports.
- Configuration properties are "junit.formatter.type",
- "junit.formatter.extension" and "junit.formatter.usefile".
- For example the following property disables generation of separate report
- files:
- junit.formatter.usefile=false
- 5. It is possible to speed up testing by letting JUnit to run several
- tests in parallel.
- This is configured by setting "test.threads" property. The recommended
- value is one thread per core.
- 6. Optional support is provided for the Cobertura code coverage tool.
- NOTE: Cobertura is licensed under GPL v2 with parts of it being under
- Apache License v1.1. See https://cobertura.github.io/cobertura/ for details.
- Using it during Tomcat build is optional and is off by default.
- Cobertura can be enabled using the following properties:
- test.cobertura=true
- test.threads=1
- Using Cobertura currently requires setting test.threads configuration
- property to the value of 1. Setting that property to a different value
- will disable code coverage.
- The report files by default are written to
- output/coverage
- 7. The performance tests are written to run reasonably powerful machines (such
- as a developer may use day to day) assuming no other resource hungry
- processes are running.
- These assumptions are not always true (e.g. on CI systems running in a
- virtual machine) so the performance tests may be disabled by using the
- following property:
- test.excludePerformance=true
- 8. Some tests include checks that the access log valve entries are as expected.
- These checks include timings. On slower / loaded systems these checks will
- often fail. The checks may be relaxed by using the following property:
- test.relaxTiming=true
- 9. It is known that some platforms (e.g. OSX El Capitan) require IPv4 to
- be the default for the multicast tests to work. This is configured by
- the following property:
- java.net.preferIPv4Stack=true
- 10. By default the output of unit tests is sent to the console and can be
- quite verbose. The output can be disabled by setting the property:
- test.verbose=false
- (8) Source code checks
- (8.1) Checkstyle
- NOTE: Checkstyle is licensed under LGPL. Using Checkstyle during Tomcat
- build is optional and is off by default.
- See http://checkstyle.sourceforge.net/ for more information.
- Tomcat comes with a Checkstyle configuration that tests its source code
- for certain conventions, like presence of the license header.
- To enable Checkstyle, add the following property to build.properties file:
- execute.validate=true
- Once Checkstyle is enabled, the check will be performed automatically
- during the build. The check is run before compilation of the source code.
- To speed-up repeated runs of this check, a cache is configured. The cache
- is located in the following directory:
- output/res/checkstyle
- It is possible to run the check separately by calling the "validate"
- target. The command is:
- cd ${tomcat.source}
- ant -Dexecute.validate=true validate
- (8.2) FindBugs
- NOTE: FindBugs is licensed under LGPL. Using Findbugs during Tomcat build is
- optional and is off by default.
- See https://spotbugs.github.io/ for more information.
- To enable FindBugs, add the following property to build.properties file:
- execute.findbugs=true
- To compile Tomcat classes and generate a FindBugs report, call the
- "findbugs" target. For example:
- cd ${tomcat.source}
- ant -Dexecute.findbugs=true findbugs
- The report file by default is written to
- output/findbugs
- (8.3) End-of-line conventions check
- You usually would not need to run this check. You can skip this section.
- Apache Tomcat project has convention that all of its textual source files,
- stored in the Git repository, use Unix style LF line endings.
- This test is used by developers to check that the source code adheres to
- this convention. It verifies that the ends of lines in textual files are
- appropriate. The idea is to run this check regularly and notify developers
- when an inconsistency is detected.
- The command to run this test is:
- cd ${tomcat.source}
- ant validate-eoln
|