aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt269
1 files changed, 0 insertions, 269 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt b/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt
deleted file mode 100644
index faec70fa..00000000
--- a/framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt
+++ /dev/null
@@ -1,269 +0,0 @@
-~~ 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.
-
- ---
- Offline Mode Design
- ---
- John Casey
- ---
- 08-April-2005
- ---
-
-Offline Mode Design
-
-* UPDATE: 18-April-2005
-
- We cannot take the approach outlined below of detecting which remote
- repositories are "really" offline, since offline mode is more of a behavior,
- and this will lead to counter-intuitive results. A different feature may exist
- unimplemented, which is to detect when the network is down and provide better
- feedback for that case. However, when offline mode is declared, nothing
- earmarked as remote should be accessed, regardless of whether it is actually
- a physically local resource.
-
- NOTE: One side-effect of this design change is that all offline-mode code can
- be isolated to maven-core, maven-plugin-descriptor, and [possibly]
- maven-artifact. Usage of maven-wagon will be determined by an offline-aware
- manager.
-
-* Assumptions: What is Offline?
-
- For the purposes of determining the areas sensitive to offline status,
- it is definitely useful to define what the offline state really means.
-
- [[1]] This is obvious, but the network/internet is unavailable.
-
- [[2]] Localhost (127.0.0.1) may also be unavailable if the whole
- network stack is offline.
-
- [[3]] "Remote" repositories referenced using the file:// protocol may
- be available. However, if that file:// url references a
- file-share, as in the case of an NFS or SMB mount, that will
- be unavailable.
-
- So, offline mode has several implications, some of which may not be
- altogether obvious:
-
- * Localhost may be unavailable. Therefore, even locally installed
- server processes which work by conversing over a port may fail.
-
- * Not all "remote" repositories will fail. Specifically, if the remote
- repo uses the file:// protocol, and it doesn't refer to a shared
- filesystem, it will continue to be available.
-
- The question remaining is: Which level of offline mode will we support? It
- seems reasonable to assume that users will be able to tell when localhost is
- not active (in most cases, localhost should be available, even if the rest of
- the network is not). Therefore, let's concentrate on the state where no
- network <beyond localhost> exists, and leave the more extreme state to users
- to diagnose and correct as necessary.
-
-* Why is Offline Mode Important?
-
- Offline mode is essential for breaking the requirement that m2 operate in a
- network-connected environment. It means legitimizing a development environment
- in which there is no network connection, and providing a robust m2 service
- offering in such circumstances. Introduction of offline mode allows m2 to
- anticipate the inevitable network failures that accompany being physically
- disconnected from the network, and adjust it's behavior accordingly.
-
- It is more than simply understanding that m2 cannot go and check for the
- latest version of some snapshot artifact. If m2 is offline, SCM operations
- cannot succeed; no artifact downloads can take place, regardless of whether
- they are snapshot versions; artifact deployment cannot take place; certain
- types of tests cannot be setup, since the container used to run them cannot be
- reached or started.
-
- All of these operations will produce their own unique errors in the absence of
- a coordinated offline strategy. In addition, efforts to unite these failing
- behaviors behind a consistent user interface is much, much more difficult if
- the system can't tell whether it has access to the network required by these
- operations.
-
- Offline mode really means anticipating a lack of network connectivity, and as
- a result turning off certain services provided by m2 and providing a coherent
- way of predicting and reporting when network-related failures will take place.
- It means warning users that since the network is missing, certain features and
- operations will be unavailable, rather than simply waiting for those
- operations to fail, then trying to help users decipher the error messages they
- get as a result.
-
-* Implications for Resolution
-
-** Dependency Resolution
-
- This one is obvious...we only have access to the repositories using
- the file:// protocol and living on a truly local filesystem when
- offline.
-
-** Plugin Resolution
-
- This is similar to dependency resolution. Plugin repositories not
- using file:// or not residing on a local (not shared) filesystem will
- be unavailable.
-
-
-* Implications for Mojo Execution
-
-** Deployment mojos
-
- The concept of deployment is dependent on the availability of a some
- remote repository. Just as above, if that repository is not using
- file:// (which is highly likely to be the case), or the repository is
- not on a local filesystem, deployment will fail when offline.
-
-** Testing mojos
-
- This can be a problem if the tests are more than simple unit tests;
- that is, if they require configuration of a server process, and
- subsequent testing in-container.
-
- Since we're only going to concern ourselves with states where localhost is
- still active, we only need to worry about this case when the server container
- is <<not>> installed on localhost. This allows the popular pattern of starting
- a server container in-JVM, running tests against it, and shutting it down.
-
-** SCM mojos
-
- See below for discussion on SCM-related operations. Any mojo which
- carries out some analysis or other interaction with a SCM system
- will likely be unavailable when in offline mode.
-
-
-* Implications for Subsystems
-
-** Maven-Wagon
-
- Parts of Wagon will continue to function normally. These include:
-
- * The file wagon, provided the referenced location is on a local
- filesystem.
-
- It is not possible to determine whether a file-based location will
- be available except on a case-by-case basis (or a root-url by
- root-url basis). We may want to move the offline sensitivity entirely to
- Maven-Artifact, below, so we can be smarter about testing filesystem-based
- repositories, etc.
-
- * If not otherwise specified, all other wagons are assumed to be
- remote-only, and are therefore sensitive to offline mode.
-
-** Maven-Artifact
-
- This is wholly dependent on Maven-Wagon, above.
-
- We could possibly use a flag on a particular Wagon to see whether it supports
- offline mode, and then test to see if the file-based basedir for an aritfact
- repository works...if it doesn't work, we can mark that repository offline...
-
- OTOH, all offline-mode checks can probably be run from Wagon-based APIs.
-
-** Maven-SCM
-
- In all but trivial examples, SCM operations cannot complete without
- having access to the versioning server. Therefore, it is assumed that
- any SCM-related activity will be unavailable when m2 is in offline
- mode.
-
-** Maven-Core
-
- We'll examine the different parts of maven-core on a case-by-case
- basis, below:
-
-*** DefaultLifecycleExecutor
-
- When binding goals to the project's configured lifecycle, each mojo
- descriptor should declare whether it requires online/offline status.
- This value should be a java.lang.Boolean, so it can implement 3VL
- (three value logic: yes, no, don't-care). The requiresOnline
- field in the mojo descriptor has the following semantics:
-
- [true] Online status is required for this mojo to function
- correctly.
-
- [false] <<(Default)>> Either status is acceptable for the mojo to
- execute. It doesn't care.
-
- The majority of mojos will leave the requiresOnline == false,
- since online/offline status will be irrelevant, provided they have
- access to their required artifacts and other classpath elements. In the case
- of required artifacts and other classpath elemtents, this is assumed by the
- mojo API to be in a correct state, and will be handled by the Wagon
- modifications.
-
-
-* Implementation Notes
-
-** Accessibility of offline status
-
- Offline status should be indicated in the MavenSettings instance, since it
- can conceivably be set from either the settings.xml or the command-line.
-
- In the event the '-o' switch is the impetus for setting offline mode, this
- should result in modification of the active profile in the MavenSettings
- instance, just as definition of the active profile from the command-line
- should result in similar modification. This object is not meant to be
- static within the build process, but rather to be setup as an aggregation of
- all settings-related information passed into the system.
-
-** Control over downloads
-
- Find the control point for m2 using maven-wagon. At this point, inject
- a offline status parameter which is used when retrieving the specific Wagon.
-
- If <<<offline == true>>>:
-
- * If the wagon is not bound to "file://", then ignore the request and print
- a debug message.
-
- * If the wagon is bound to "file://" then:
-
- Retrieve the file or base-url file to be "downloaded".
-
- * If the file (or more usefully, the base-url file) exists, proceed.
-
- * If the file (or base-url file) doesn't exist, assume that this location
- is part of a file-share. Ignore the request and print a debug message
- as above.
-
-** Control over mojos in the lifecycle
-
- When binding a mojo to the project's lifecycle instance, check the mojo
- descriptor's requiredConnectivity field.
-
- * If <<<(offline == true) && (requiresOnline != true)>>>, bind
- the mojo to the lifecycle.
-
- In this case, the client is <<offline>>, and the mojo does not require
- online status.
-
- * If <<<(offline == false) && (requiresOnline == true)>>>, bind
- the mojo to the lifecycle.
-
- In this case, the client is <<online>>, and the mojo either requires
- <<online>> status, or else doesn't care.
-
- * Otherwise, don't bind the mojo. Log a debug message to indicate that it is
- sensitive the the online state of the application, and that this state is
- currently wrong for execution.
-
- <<NOTE:>> Do we want to fail when we cannot bind a mojo to the lifecycle
- because of offline/online status? That would probably indicate that the user
- was trying to do something they cannot succeed at for now...so we probably
- should throw an exception in this case.
-
-