mirror of https://github.com/apache/maven.git
[MWRAPPER-14] remove Maven Wrapper from core
This commit is contained in:
parent
6257b33142
commit
f793d862e3
|
@ -46,20 +46,6 @@ jobs:
|
|||
name: built-maven
|
||||
path: apache-maven/target/
|
||||
|
||||
- name: Upload built Apache Maven Wrapper
|
||||
uses: actions/upload-artifact@v2
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
with:
|
||||
name: built-apache-maven-wrapper
|
||||
path: apache-maven-wrapper/target/
|
||||
|
||||
- name: Upload built Maven Wrapper
|
||||
uses: actions/upload-artifact@v2
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
with:
|
||||
name: built-maven-wrapper
|
||||
path: maven-wrapper/target/maven-wrapper.jar
|
||||
|
||||
integration-test:
|
||||
needs: build
|
||||
strategy:
|
||||
|
@ -123,18 +109,6 @@ jobs:
|
|||
name: built-maven
|
||||
path: built-maven/
|
||||
|
||||
- name: Download built Apache Maven Wrapper
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: built-apache-maven-wrapper
|
||||
path: built-apache-maven-wrapper/
|
||||
|
||||
- name: Download built Maven Wrapper
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: built-maven-wrapper
|
||||
path: built-maven-wrapper/
|
||||
|
||||
- name: Set up JDK
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
|
@ -144,4 +118,4 @@ jobs:
|
|||
|
||||
- name: Running integration tests
|
||||
shell: bash
|
||||
run: mvn install -e -B -V -Prun-its,embedded -Dmaven.repo.local="$HOME/.m2/repository" -DmavenDistro="$GITHUB_WORKSPACE/built-maven/apache-maven-bin.zip" -DwrapperDistroDir="$GITHUB_WORKSPACE/built-apache-maven-wrapper/" -DmavenWrapper="$GITHUB_WORKSPACE/built-maven-wrapper/maven-wrapper.jar" -f maven-integration-testing/pom.xml
|
||||
run: mvn install -e -B -V -Prun-its,embedded -Dmaven.repo.local="$HOME/.m2/repository" -DmavenDistro="$GITHUB_WORKSPACE/built-maven/apache-maven-bin.zip" -f maven-integration-testing/pom.xml
|
||||
|
|
|
@ -58,19 +58,11 @@ node(jenkinsEnv.nodeSelection(osNode)) {
|
|||
invokerPublisher(disabled: true),
|
||||
pipelineGraphPublisher(disabled: false)
|
||||
], publisherStrategy: 'EXPLICIT') {
|
||||
// For now: maven-wrapper contains 2 poms sharing the same outputDirectory, so separate clean
|
||||
sh "mvn clean"
|
||||
sh "mvn ${MAVEN_GOAL} -B -U -e -fae -V -Dmaven.test.failure.ignore=true -P versionlessMavenDist"
|
||||
sh "mvn clean ${MAVEN_GOAL} -B -U -e -fae -V -Dmaven.test.failure.ignore -PversionlessMavenDist"
|
||||
}
|
||||
dir ('apache-maven/target') {
|
||||
stash includes: 'apache-maven-bin.zip', name: 'maven-dist'
|
||||
}
|
||||
dir ('apache-maven-wrapper/target') {
|
||||
stash includes: 'apache-maven-wrapper-*.zip', name: 'maven-wrapper-dist'
|
||||
}
|
||||
dir ('maven-wrapper/target') {
|
||||
stash includes: 'maven-wrapper.jar', name: 'wrapper-dist'
|
||||
}
|
||||
}
|
||||
|
||||
tests = resolveScm source: [$class: 'GitSCMSource', credentialsId: '', id: '_', remote: 'https://gitbox.apache.org/repos/asf/maven-integration-testing.git', traits: [[$class: 'jenkins.plugins.git.traits.BranchDiscoveryTrait'], [$class: 'GitToolSCMSourceTrait', gitTool: 'Default']]], targets: [BRANCH_NAME, 'master']
|
||||
|
@ -105,14 +97,12 @@ for (String os in runITsOses) {
|
|||
}
|
||||
dir('dists') {
|
||||
unstash 'maven-dist'
|
||||
unstash 'maven-wrapper-dist'
|
||||
unstash 'wrapper-dist'
|
||||
}
|
||||
try {
|
||||
withMaven(jdk: jdkName, maven: mvnName, mavenLocalRepo:"${WORK_DIR}/it-local-repo", options:[
|
||||
junitPublisher(ignoreAttachments: false)
|
||||
]) {
|
||||
String cmd = "${runITscommand} -DmavenDistro=$WORK_DIR/dists/apache-maven-bin.zip -Dmaven.test.failure.ignore=true -DmavenWrapper=$WORK_DIR/dists/maven-wrapper.jar -DwrapperDistroDir=${WORK_DIR}/dists"
|
||||
String cmd = "${runITscommand} -DmavenDistro=$WORK_DIR/dists/apache-maven-bin.zip -Dmaven.test.failure.ignore"
|
||||
|
||||
if (isUnix()) {
|
||||
sh 'df -hT'
|
||||
|
|
|
@ -32,7 +32,7 @@ pipeline {
|
|||
stage("Build Maven Core") {
|
||||
steps {
|
||||
withEnv(["JAVA_HOME=${ tool "JDK 1.8 (latest)" }", "PATH+MAVEN=${tool 'Maven 3.6.3'}/bin:${env.JAVA_HOME}/bin"]) {
|
||||
sh "mvn -Drat.skip=true -T2 -B -V install -P versionlessMavenDist -Dmaven.repo.local=${env.WORKSPACE}/repo"
|
||||
sh "mvn -Drat.skip=true -T2 -B -V install -PversionlessMavenDist -Dmaven.repo.local=${env.WORKSPACE}/repo"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ pipeline {
|
|||
git url: "https://github.com/apache/maven-integration-testing.git", branch: "${ITS_BRANCH}"
|
||||
sh "ls -lrt ${env.WORKSPACE}/apache-maven/target/"
|
||||
withEnv(["JAVA_HOME=${ tool "JDK 1.8 (latest)" }", "PATH+MAVEN=${tool 'Maven 3.6.3'}/bin:${env.JAVA_HOME}/bin"]) {
|
||||
sh "mvn clean install -V -B -Prun-its,embedded -Dmaven.test.failure.ignore=true -Dmaven.repo.local=${env.WORKSPACE}/repo -DmavenDistro=${env.WORKSPACE}/apache-maven/target/apache-maven-bin.zip -DwrapperDistroDir=${env.WORKSPACE}/apache-maven-wrapper/target -DmavenWrapper=${env.WORKSPACE}/maven-wrapper/target/maven-wrapper.jar"
|
||||
sh "mvn clean install -V -B -Prun-its,embedded -Dmaven.test.failure.ignore -Dmaven.repo.local=${env.WORKSPACE}/repo -DmavenDistro=${env.WORKSPACE}/apache-maven/target/apache-maven-bin.zip"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,128 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven</artifactId>
|
||||
<version>4.0.0-alpha-1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>apache-maven-wrapper</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>Apache Maven Wrapper Distribution</name>
|
||||
<description>The Apache Maven Wrapper distribution zips in 3 types: script, bin and source.</description>
|
||||
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.rat</groupId>
|
||||
<artifactId>apache-rat-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes combine.children="append">
|
||||
<exclude>src/assembly/maven/bin/m2.conf</exclude>
|
||||
<!-- these are partial scripts, resulting in mwnw scripts -->
|
||||
<exclude>src/assembly/shared/mvnwlauncher</exclude>
|
||||
<exclude>src/assembly/shared/mvnwlauncher.cmd</exclude>
|
||||
<exclude>src/assembly/*/download</exclude>
|
||||
<exclude>src/assembly/*/download.cmd</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<configuration>
|
||||
<skip>true</skip> <!-- sharing outputDirectory with maven-dist -->
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>src/assembly/script.xml</descriptor>
|
||||
<descriptor>src/assembly/bin.xml</descriptor>
|
||||
<descriptor>src/assembly/source.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-wrapper</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>apache-release</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- calculate sha512 checksums -->
|
||||
<plugin>
|
||||
<groupId>net.nicoulaj.maven.plugins</groupId>
|
||||
<artifactId>checksum-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>source-release-checksum</id>
|
||||
<goals>
|
||||
<goal>files</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>${project.build.directory}</directory>
|
||||
<includes>
|
||||
<include>${project.artifactId}-${project.version}-bin.zip</include>
|
||||
<include>${project.artifactId}-${project.version}-script.zip</include>
|
||||
<include>${project.artifactId}-${project.version}-source.zip</include>
|
||||
</includes>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
<failIfNoFiles>true</failIfNoFiles>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
|
@ -1,85 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
|
||||
<id>bin</id>
|
||||
<formats>
|
||||
<format>zip</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<dependencySets>
|
||||
<dependencySet>
|
||||
<useProjectArtifact>false</useProjectArtifact>
|
||||
<includes>
|
||||
<include>org.apache.maven:maven-wrapper:jar:*</include>
|
||||
</includes>
|
||||
<outputDirectory>.mvn/wrapper</outputDirectory>
|
||||
<outputFileNameMapping>maven-wrapper.jar</outputFileNameMapping>
|
||||
</dependencySet>
|
||||
</dependencySets>
|
||||
<files>
|
||||
<file>
|
||||
<source>src/assembly/shared/mvnwDebug.cmd</source>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>dos</lineEnding>
|
||||
</file>
|
||||
<file>
|
||||
<source>src/assembly/shared/mvnwDebug</source>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>unix</lineEnding>
|
||||
<fileMode>0755</fileMode>
|
||||
</file>
|
||||
<file>
|
||||
<sources>
|
||||
<source>../apache-maven/src/assembly/shared/validate.cmd</source>
|
||||
<source>../apache-maven/src/assembly/shared/init.cmd</source>
|
||||
<source>src/assembly/shared/mvnwlauncher.cmd</source>
|
||||
<source>../apache-maven/src/assembly/shared/run.cmd</source>
|
||||
</sources>
|
||||
<destName>mvnw.cmd</destName>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>dos</lineEnding>
|
||||
<filtered>true</filtered>
|
||||
</file>
|
||||
<file>
|
||||
<sources>
|
||||
<source>../apache-maven/src/assembly/shared/validate</source>
|
||||
<source>../apache-maven/src/assembly/shared/init</source>
|
||||
<source>src/assembly/shared/mvnwlauncher</source>
|
||||
<source>../apache-maven/src/assembly/shared/run</source>
|
||||
</sources>
|
||||
<destName>mvnw</destName>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>unix</lineEnding>
|
||||
<fileMode>0755</fileMode>
|
||||
<filtered>true</filtered>
|
||||
</file>
|
||||
</files>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>src/assembly/shared/mvn</directory>
|
||||
<outputDirectory>.mvn</outputDirectory>
|
||||
<filtered>true</filtered>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</assembly>
|
|
@ -1,77 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
|
||||
<id>script</id>
|
||||
<formats>
|
||||
<format>zip</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<files>
|
||||
<file>
|
||||
<source>src/assembly/shared/mvnwDebug.cmd</source>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>dos</lineEnding>
|
||||
</file>
|
||||
<file>
|
||||
<source>src/assembly/shared/mvnwDebug</source>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>unix</lineEnding>
|
||||
<fileMode>0755</fileMode>
|
||||
</file>
|
||||
<file>
|
||||
<sources>
|
||||
<source>../apache-maven/src/assembly/shared/validate.cmd</source>
|
||||
<source>../apache-maven/src/assembly/shared/init.cmd</source>
|
||||
<source>src/assembly/shared/mvnwlauncher.cmd</source>
|
||||
<source>src/assembly/script/download.cmd</source>
|
||||
<source>../apache-maven/src/assembly/shared/run.cmd</source>
|
||||
</sources>
|
||||
<destName>mvnw.cmd</destName>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>dos</lineEnding>
|
||||
<filtered>true</filtered>
|
||||
</file>
|
||||
<file>
|
||||
<sources>
|
||||
<source>../apache-maven/src/assembly/shared/validate</source>
|
||||
<source>../apache-maven/src/assembly/shared/init</source>
|
||||
<source>src/assembly/shared/mvnwlauncher</source>
|
||||
<source>src/assembly/script/download</source>
|
||||
<source>../apache-maven/src/assembly/shared/run</source>
|
||||
</sources>
|
||||
<destName>mvnw</destName>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>unix</lineEnding>
|
||||
<fileMode>0755</fileMode>
|
||||
<filtered>true</filtered>
|
||||
</file>
|
||||
</files>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>src/assembly/shared/mvn</directory>
|
||||
<outputDirectory>.mvn</outputDirectory>
|
||||
<filtered>true</filtered>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</assembly>
|
|
@ -1,51 +0,0 @@
|
|||
##########################################################################################
|
||||
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
# This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
##########################################################################################
|
||||
if [ -r "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found .mvn/wrapper/maven-wrapper.jar"
|
||||
fi
|
||||
else
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
|
||||
fi
|
||||
|
||||
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/maven-wrapper/${project.version}/maven-wrapper-${project.version}.jar"
|
||||
|
||||
if [ -n "$MVNW_REPOURL" ]; then
|
||||
jarUrl="$MVNW_REPOURL/org/apache/maven/maven-wrapper/${project.version}/maven-wrapper-${project.version}.jar"
|
||||
fi
|
||||
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Downloading from: $jarUrl"
|
||||
fi
|
||||
wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
|
||||
if $cygwin; then
|
||||
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
|
||||
fi
|
||||
|
||||
if [ `echo "${jarUrl}" | cut -c 1-4` != 'file' ] && command -v wget > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found wget ... using wget"
|
||||
fi
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
|
||||
else
|
||||
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
|
||||
fi
|
||||
elif command -v curl > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found curl ... using curl"
|
||||
fi
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
curl --location -o "$wrapperJarPath" "$jarUrl" -f
|
||||
else
|
||||
curl --location --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
##########################################################################################
|
||||
# End of extension
|
||||
##########################################################################################
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
IF NOT EXIST %LAUNCHER_JAR% goto downloadWrapper
|
||||
|
||||
if "%MVNW_VERBOSE%" == "true" ECHO Found %LAUNCHER_JAR%
|
||||
goto endWrapper
|
||||
|
||||
:downloadWrapper
|
||||
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/maven-wrapper/${project.version}/maven-wrapper-${project.version}.jar"
|
||||
|
||||
if not "%MVNW_REPOURL%" == "" (
|
||||
SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/maven-wrapper/${project.version}/maven-wrapper-${project.version}.jar"
|
||||
)
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Couldn't find %LAUNCHER_JAR%, downloading it ...
|
||||
echo Downloading from: %DOWNLOAD_URL%
|
||||
)
|
||||
|
||||
powershell -Command "&{"^
|
||||
"$webclient = new-object System.Net.WebClient;"^
|
||||
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
|
||||
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
|
||||
"}"^
|
||||
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%LAUNCHER_JAR%')"^
|
||||
"}"
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Finished downloading %LAUNCHER_JAR%
|
||||
)
|
||||
|
||||
:endWrapper
|
||||
@REM End of extension
|
||||
|
|
@ -1,17 +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.
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/${project.version}/apache-maven-${project.version}-bin.zip
|
|
@ -1,35 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# 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.
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Apache Maven Debug Script
|
||||
#
|
||||
# Environment Variable Prerequisites
|
||||
#
|
||||
# JAVA_HOME (Optional) Points to a Java installation.
|
||||
# MAVEN_OPTS (Optional) Java runtime options used when Maven is executed.
|
||||
# MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files.
|
||||
# MAVEN_DEBUG_ADDRESS (Optional) Set the debug address. Default value is localhost:8000
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
MAVEN_DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${MAVEN_DEBUG_ADDRESS:-localhost:8000}"
|
||||
|
||||
echo Preparing to execute Maven Wrapper in debug mode
|
||||
|
||||
env MAVEN_OPTS="$MAVEN_OPTS" MAVEN_DEBUG_OPTS="$MAVEN_DEBUG_OPTS" "`dirname "$0"`/mvnw" "$@"
|
|
@ -1,44 +0,0 @@
|
|||
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||
@REM or more contributor license agreements. See the NOTICE file
|
||||
@REM distributed with this work for additional information
|
||||
@REM regarding copyright ownership. The ASF licenses this file
|
||||
@REM to you under the Apache License, Version 2.0 (the
|
||||
@REM "License"); you may not use this file except in compliance
|
||||
@REM with the License. You may obtain a copy of the License at
|
||||
@REM
|
||||
@REM http://www.apache.org/licenses/LICENSE-2.0
|
||||
@REM
|
||||
@REM Unless required by applicable law or agreed to in writing,
|
||||
@REM software distributed under the License is distributed on an
|
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
@REM KIND, either express or implied. See the License for the
|
||||
@REM specific language governing permissions and limitations
|
||||
@REM under the License.
|
||||
|
||||
@REM -----------------------------------------------------------------------------
|
||||
@REM Apache Maven Debug Script
|
||||
@REM
|
||||
@REM Environment Variable Prerequisites
|
||||
@REM
|
||||
@REM JAVA_HOME (Optional) Points to a Java installation.
|
||||
@REM MAVEN_BATCH_ECHO (Optional) Set to 'on' to enable the echoing of the batch commands.
|
||||
@REM MAVEN_BATCH_PAUSE (Optional) set to 'on' to wait for a key stroke before ending.
|
||||
@REM MAVEN_OPTS (Optional) Java runtime options used when Maven is executed.
|
||||
@REM MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files.
|
||||
@REM MAVEN_DEBUG_ADDRESS (Optional) Set the debug address. Default value is localhost:8000
|
||||
@REM -----------------------------------------------------------------------------
|
||||
|
||||
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
|
||||
@echo off
|
||||
@REM set title of command window
|
||||
title %0
|
||||
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
|
||||
@if "%MAVEN_BATCH_ECHO%"=="on" echo %MAVEN_BATCH_ECHO%
|
||||
|
||||
@setlocal
|
||||
|
||||
IF "%MAVEN_DEBUG_ADDRESS%"=="" @set MAVEN_DEBUG_ADDRESS=localhost:8000
|
||||
|
||||
@set MAVEN_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=%MAVEN_DEBUG_ADDRESS%
|
||||
|
||||
@call "%~dp0"mvnw.cmd %*
|
|
@ -1,3 +0,0 @@
|
|||
LAUNCHER_JAR="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
|
||||
LAUNCHER_CLASS=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
set LAUNCHER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
|
||||
set LAUNCHER_CLASS=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
|
||||
<id>source</id>
|
||||
<formats>
|
||||
<format>zip</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<files>
|
||||
<file>
|
||||
<source>src/assembly/shared/mvnwDebug.cmd</source>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>dos</lineEnding>
|
||||
</file>
|
||||
<file>
|
||||
<source>src/assembly/shared/mvnwDebug</source>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>unix</lineEnding>
|
||||
<fileMode>0755</fileMode>
|
||||
</file>
|
||||
<file>
|
||||
<sources>
|
||||
<source>../apache-maven/src/assembly/shared/validate.cmd</source>
|
||||
<source>../apache-maven/src/assembly/shared/init.cmd</source>
|
||||
<source>src/assembly/shared/mvnwlauncher.cmd</source>
|
||||
<source>src/assembly/source/download.cmd</source>
|
||||
<source>../apache-maven/src/assembly/shared/run.cmd</source>
|
||||
</sources>
|
||||
<destName>mvnw.cmd</destName>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>dos</lineEnding>
|
||||
<filtered>true</filtered>
|
||||
</file>
|
||||
<file>
|
||||
<sources>
|
||||
<source>../apache-maven/src/assembly/shared/validate</source>
|
||||
<source>../apache-maven/src/assembly/shared/init</source>
|
||||
<source>src/assembly/shared/mvnwlauncher</source>
|
||||
<source>src/assembly/source/download</source>
|
||||
<source>../apache-maven/src/assembly/shared/run</source>
|
||||
</sources>
|
||||
<destName>mvnw</destName>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
<lineEnding>unix</lineEnding>
|
||||
<fileMode>0755</fileMode>
|
||||
<filtered>true</filtered>
|
||||
</file>
|
||||
</files>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>src/assembly/shared/mvn</directory>
|
||||
<outputDirectory>.mvn</outputDirectory>
|
||||
<filtered>true</filtered>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>src/assembly/source/mvn</directory>
|
||||
<outputDirectory>.mvn</outputDirectory>
|
||||
<filtered>true</filtered>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</assembly>
|
|
@ -1,34 +0,0 @@
|
|||
##########################################################################################
|
||||
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
# This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
##########################################################################################
|
||||
if [ -r "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found .mvn/wrapper/maven-wrapper.jar"
|
||||
fi
|
||||
else
|
||||
javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
|
||||
# For Cygwin, switch paths to Windows format before running javac
|
||||
if $cygwin; then
|
||||
javaClass=`cygpath --path --windows "$javaClass"`
|
||||
fi
|
||||
if [ -e "$javaClass" ]; then
|
||||
if [ ! -e "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Compiling MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
# Compiling the Java class
|
||||
("$JAVA_HOME/bin/javac" "$javaClass")
|
||||
fi
|
||||
if [ -e "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
# Running the downloader
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Running MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
##########################################################################################
|
||||
# End of extension
|
||||
##########################################################################################
|
|
@ -1,21 +0,0 @@
|
|||
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
|
||||
SET javaClass="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\MavenWrapperDownloader.java"
|
||||
IF EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\MavenDownloader.class" goto :runDownloader
|
||||
|
||||
if "%MVNW_VERBOSE%" == "true" echo - Compiling MavenWrapperDownloader.java ...
|
||||
|
||||
@REM Compiling the Java class
|
||||
"%JAVA_HOME%\bin\javac" %javaClass%
|
||||
|
||||
:runDownloader
|
||||
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\MavenWrapperDownloader.class" goto endWrapper
|
||||
|
||||
if "%MVNW_VERBOSE%" == "true" echo - Running MavenWrapperDownloader.class ...
|
||||
@REM Running the downloader
|
||||
"%JAVA_HOME%\bin\java" -cp "%MAVEN_PROJECTBASEDIR%\.mvn\wrapper" MavenWrapperDownloader "%MAVEN_PROJECTBASEDIR%"
|
||||
|
||||
:endWrapper
|
||||
@REM End of extension
|
||||
|
|
@ -1,131 +0,0 @@
|
|||
/*
|
||||
* Copyright 2007-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.Authenticator;
|
||||
import java.net.PasswordAuthentication;
|
||||
import java.net.URL;
|
||||
import java.nio.channels.Channels;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.util.Objects;
|
||||
import java.util.Properties;
|
||||
|
||||
public class MavenWrapperDownloader {
|
||||
|
||||
private static final String WRAPPER_VERSION = "${project.version}";
|
||||
|
||||
/**
|
||||
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
|
||||
*/
|
||||
private static final String DEFAULT_DOWNLOAD_PATH = "/org/apache/maven/maven-wrapper/"
|
||||
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
|
||||
|
||||
/**
|
||||
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
|
||||
* use instead of the default one.
|
||||
*/
|
||||
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
|
||||
".mvn/wrapper/maven-wrapper.properties";
|
||||
|
||||
/**
|
||||
* Path where the maven-wrapper.jar will be saved to.
|
||||
*/
|
||||
private static final String MAVEN_WRAPPER_JAR_PATH =
|
||||
".mvn/wrapper/maven-wrapper.jar";
|
||||
|
||||
/**
|
||||
* Name of the property which should be used to override the default download url for the wrapper.
|
||||
*/
|
||||
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
|
||||
|
||||
public static void main( String args[] ) {
|
||||
System.out.println("- Downloader started");
|
||||
File baseDirectory = new File(args[0]);
|
||||
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
|
||||
|
||||
// If the maven-wrapper.properties exists, read it and check if it contains a custom
|
||||
// wrapperUrl parameter.
|
||||
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
|
||||
|
||||
String url = null;
|
||||
|
||||
String repoUrl = System.getenv( "MVNW_REPOURL" );
|
||||
if ( repoUrl != null )
|
||||
{
|
||||
url = repoUrl + DEFAULT_DOWNLOAD_PATH;
|
||||
}
|
||||
else if ( mavenWrapperPropertyFile.exists() )
|
||||
{
|
||||
Properties mavenWrapperProperties = new Properties();
|
||||
try ( InputStream mavenWrapperPropertyFileInputStream = new FileInputStream( mavenWrapperPropertyFile ) )
|
||||
{
|
||||
mavenWrapperProperties.load( mavenWrapperPropertyFileInputStream );
|
||||
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
|
||||
}
|
||||
}
|
||||
|
||||
if ( url == null )
|
||||
{
|
||||
url = "https://repo.maven.apache.org/maven2" + DEFAULT_DOWNLOAD_PATH;
|
||||
}
|
||||
System.out.println("- Downloading from: " + url);
|
||||
|
||||
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
|
||||
if(!outputFile.getParentFile().exists()) {
|
||||
if(!outputFile.getParentFile().mkdirs()) {
|
||||
System.out.println(
|
||||
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
|
||||
}
|
||||
}
|
||||
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
|
||||
try {
|
||||
downloadFileFromURL(url, outputFile);
|
||||
System.out.println("Done");
|
||||
System.exit(0);
|
||||
} catch (Throwable e) {
|
||||
System.out.println("- Error downloading");
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
|
||||
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
|
||||
String username = System.getenv("MVNW_USERNAME");
|
||||
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
|
||||
Authenticator.setDefault(new Authenticator() {
|
||||
@Override
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
return new PasswordAuthentication(username, password);
|
||||
}
|
||||
});
|
||||
}
|
||||
URL website = new URL(urlString);
|
||||
try ( ReadableByteChannel rbc = Channels.newChannel( website.openStream() );
|
||||
FileOutputStream fos = new FileOutputStream(destination) )
|
||||
{
|
||||
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,58 +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.
|
||||
|
||||
-----
|
||||
${project.name}
|
||||
-----
|
||||
Hervé Boutemy
|
||||
-----
|
||||
2021-10-10
|
||||
-----
|
||||
|
||||
${project.name}
|
||||
|
||||
${project.description}
|
||||
|
||||
Distributions types share the same base structure:
|
||||
|
||||
----
|
||||
mvnw
|
||||
mvnw.cmd
|
||||
mvnwDebug
|
||||
mvnwDebug.cmd
|
||||
.mvn/wrapper/maven-wrapper.properties
|
||||
----
|
||||
|
||||
but every distribution has specific <<<mvnw>>>/<<<mvnw.cmd>>> scripts to manage different strategies to get {{{../maven-wrapper/}<<<maven-wrapper.jar>>>}}:
|
||||
|
||||
- <<<script>>> (default): <<<mvnw>>>/<<<mvnw.cmd>>> scripts will download {{{../maven-wrapper/}<<<maven-wrapper.jar>>>}} with <<<wget>>> or <<<curl>>> on Unix or PowerShell on Windows
|
||||
|
||||
- <<<bin>>>: no need to download <<<maven-wrapper.jar>>> binary, it is directly provided and used from project source tree:
|
||||
|
||||
----
|
||||
.mvn/wrapper/maven-wrapper.jar
|
||||
----
|
||||
|
||||
- <<<source>>>: <<<mvnw>>>/<<<mvnw.cmd>>> scripts will compile <<<MavenWrapperDownloader.java>>> source then run the class to download {{{../maven-wrapper/}<<<maven-wrapper.jar>>>}}:
|
||||
|
||||
----
|
||||
.mvn/wrapper/MavenWrapperDownloader.java
|
||||
----
|
||||
|
||||
[]
|
||||
|
||||
Distribution can be installed in a project either by unpacking zip archive by hand, or by using {{{/plugins/maven-wrapper-plugin/}<<<wrapper:wrapper>>>}}.
|
|
@ -1,31 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/DECORATION/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.8.0 http://maven.apache.org/xsd/decoration-1.8.0.xsd">
|
||||
|
||||
<edit>${project.scm.url}</edit>
|
||||
|
||||
<body>
|
||||
<menu ref="parent"/>
|
||||
<menu ref="reports"/>
|
||||
</body>
|
||||
</project>
|
|
@ -1,65 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven</artifactId>
|
||||
<version>4.0.0-alpha-1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>maven-wrapper</artifactId>
|
||||
<name>Maven Wrapper</name>
|
||||
<description>Maven Wrapper ...</description>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName> <!-- to simplify installation for maven-integration-testing -->
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest</artifactId>
|
||||
<version>2.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>2.23.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- Using zip util class, should be replaced with a zip lib -->
|
||||
<dependency>
|
||||
<groupId>org.apache.ant</groupId>
|
||||
<artifactId>ant</artifactId>
|
||||
<version>1.10.9</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -1,64 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* Maven starter, from a provided Maven home directory.
|
||||
*
|
||||
* @author Hans Dockter
|
||||
*/
|
||||
public class BootstrapMainStarter
|
||||
{
|
||||
public void start( String[] args, Path mavenHome )
|
||||
throws Exception
|
||||
{
|
||||
Path mavenJar = findLauncherJar( mavenHome );
|
||||
URLClassLoader contextClassLoader = new URLClassLoader( new URL[] { mavenJar.toUri().toURL() },
|
||||
ClassLoader.getSystemClassLoader().getParent() );
|
||||
Thread.currentThread().setContextClassLoader( contextClassLoader );
|
||||
Class<?> mainClass = contextClassLoader.loadClass( "org.codehaus.plexus.classworlds.launcher.Launcher" );
|
||||
|
||||
System.setProperty( "maven.home", mavenHome.toAbsolutePath().toString() );
|
||||
System.setProperty( "classworlds.conf", mavenHome.resolve( "bin/m2.conf" ).toAbsolutePath().toString() );
|
||||
|
||||
Method mainMethod = mainClass.getMethod( "main", String[].class );
|
||||
mainMethod.invoke( null, new Object[] { args } );
|
||||
}
|
||||
|
||||
private Path findLauncherJar( Path mavenHome ) throws RuntimeException, IOException
|
||||
{
|
||||
try ( Stream<Path> list = Files.list( mavenHome.resolve( "boot" ) ) )
|
||||
{
|
||||
return list.filter( p -> p.getFileName().toString().matches( "plexus-classworlds-.*\\.jar" ) )
|
||||
.findFirst()
|
||||
.orElseThrow( () -> new RuntimeException(
|
||||
String.format( "Couldn't locate the Maven launcher JAR in Maven distribution '%s'.",
|
||||
mavenHome ) ) );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,190 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import static org.apache.maven.wrapper.MavenWrapperMain.MVNW_PASSWORD;
|
||||
import static org.apache.maven.wrapper.MavenWrapperMain.MVNW_USERNAME;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.Authenticator;
|
||||
import java.net.PasswordAuthentication;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Base64;
|
||||
|
||||
/**
|
||||
* @author Hans Dockter
|
||||
*/
|
||||
public class DefaultDownloader
|
||||
implements Downloader
|
||||
{
|
||||
private static final int PROGRESS_CHUNK = 500000;
|
||||
|
||||
private static final int BUFFER_SIZE = 10000;
|
||||
|
||||
private final String applicationName;
|
||||
|
||||
private final String applicationVersion;
|
||||
|
||||
public DefaultDownloader( String applicationName, String applicationVersion )
|
||||
{
|
||||
this.applicationName = applicationName;
|
||||
this.applicationVersion = applicationVersion;
|
||||
configureProxyAuthentication();
|
||||
configureAuthentication();
|
||||
}
|
||||
|
||||
private void configureProxyAuthentication()
|
||||
{
|
||||
if ( System.getProperty( "http.proxyUser" ) != null )
|
||||
{
|
||||
Authenticator.setDefault( new SystemPropertiesProxyAuthenticator() );
|
||||
}
|
||||
}
|
||||
|
||||
private void configureAuthentication()
|
||||
{
|
||||
if ( System.getenv( MVNW_USERNAME ) != null && System.getenv( MVNW_PASSWORD ) != null
|
||||
&& System.getProperty( "http.proxyUser" ) == null )
|
||||
{
|
||||
Authenticator.setDefault( new Authenticator()
|
||||
{
|
||||
@Override
|
||||
protected PasswordAuthentication getPasswordAuthentication()
|
||||
{
|
||||
return new PasswordAuthentication( System.getenv( MVNW_USERNAME ),
|
||||
System.getenv( MVNW_PASSWORD ).toCharArray() );
|
||||
}
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void download( URI address, Path destination ) throws IOException
|
||||
{
|
||||
if ( Files.exists( destination ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
Files.createDirectories( destination.getParent() );
|
||||
|
||||
downloadInternal( address, destination );
|
||||
}
|
||||
|
||||
private void downloadInternal( URI address, Path destination ) throws IOException
|
||||
{
|
||||
URL url = address.toURL();
|
||||
URLConnection conn = url.openConnection();
|
||||
addBasicAuthentication( address, conn );
|
||||
final String userAgentValue = calculateUserAgent();
|
||||
conn.setRequestProperty( "User-Agent", userAgentValue );
|
||||
|
||||
try ( OutputStream out = new BufferedOutputStream( Files.newOutputStream( destination ) );
|
||||
InputStream in = conn.getInputStream() )
|
||||
{
|
||||
byte[] buffer = new byte[BUFFER_SIZE];
|
||||
int numRead;
|
||||
long progressCounter = 0;
|
||||
while ( ( numRead = in.read( buffer ) ) != -1 )
|
||||
{
|
||||
progressCounter += numRead;
|
||||
if ( progressCounter / PROGRESS_CHUNK > 0 )
|
||||
{
|
||||
Logger.info( "." );
|
||||
progressCounter = progressCounter - PROGRESS_CHUNK;
|
||||
}
|
||||
out.write( buffer, 0, numRead );
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
Logger.info( "" );
|
||||
}
|
||||
}
|
||||
|
||||
private void addBasicAuthentication( URI address, URLConnection connection )
|
||||
throws IOException
|
||||
{
|
||||
String userInfo = calculateUserInfo( address );
|
||||
if ( userInfo == null )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( !"https".equals( address.getScheme() ) )
|
||||
{
|
||||
Logger.warn( "WARNING Using HTTP Basic Authentication over an insecure connection"
|
||||
+ " to download the Maven distribution. Please consider using HTTPS." );
|
||||
}
|
||||
connection.setRequestProperty( "Authorization", "Basic " + base64Encode( userInfo ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64 encode user info for HTTP Basic Authentication.
|
||||
*
|
||||
* @param userInfo user info
|
||||
* @return Base64 encoded user info
|
||||
* @throws RuntimeException if no public Base64 encoder is available on this JVM
|
||||
*/
|
||||
private String base64Encode( String userInfo )
|
||||
{
|
||||
return Base64.getEncoder().encodeToString( userInfo.getBytes( StandardCharsets.UTF_8 ) );
|
||||
}
|
||||
|
||||
private String calculateUserInfo( URI uri )
|
||||
{
|
||||
String username = System.getenv( MVNW_USERNAME );
|
||||
String password = System.getenv( MVNW_PASSWORD );
|
||||
if ( username != null && password != null )
|
||||
{
|
||||
return username + ':' + password;
|
||||
}
|
||||
return uri.getUserInfo();
|
||||
}
|
||||
|
||||
private String calculateUserAgent()
|
||||
{
|
||||
String javaVendor = System.getProperty( "java.vendor" );
|
||||
String javaVersion = System.getProperty( "java.version" );
|
||||
String javaVendorVersion = System.getProperty( "java.vm.version" );
|
||||
String osName = System.getProperty( "os.name" );
|
||||
String osVersion = System.getProperty( "os.version" );
|
||||
String osArch = System.getProperty( "os.arch" );
|
||||
return String.format( "%s/%s (%s;%s;%s) (%s;%s;%s)", applicationName, applicationVersion, osName, osVersion,
|
||||
osArch, javaVendor, javaVersion, javaVendorVersion );
|
||||
}
|
||||
|
||||
private static class SystemPropertiesProxyAuthenticator
|
||||
extends Authenticator
|
||||
{
|
||||
@Override
|
||||
protected PasswordAuthentication getPasswordAuthentication()
|
||||
{
|
||||
return new PasswordAuthentication( System.getProperty( "http.proxyUser" ),
|
||||
System.getProperty( "http.proxyPassword", "" ).toCharArray() );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import java.net.URI;
|
||||
import java.nio.file.Path;
|
||||
|
||||
/**
|
||||
* Maven distribution downloader.
|
||||
*
|
||||
* @author Hans Dockter
|
||||
*/
|
||||
public interface Downloader
|
||||
{
|
||||
void download( URI address, Path destination ) throws IOException;
|
||||
}
|
|
@ -1,231 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.file.FileVisitResult;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.SimpleFileVisitor;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Formatter;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
|
||||
/**
|
||||
* Maven distribution installer, eventually using a {@link Downloader} first.
|
||||
*
|
||||
* @author Hans Dockter
|
||||
*/
|
||||
public class Installer
|
||||
{
|
||||
public static final String DEFAULT_DISTRIBUTION_PATH = "wrapper/dists";
|
||||
|
||||
private final Downloader download;
|
||||
|
||||
private final PathAssembler pathAssembler;
|
||||
|
||||
public Installer( Downloader download, PathAssembler pathAssembler )
|
||||
{
|
||||
this.download = download;
|
||||
this.pathAssembler = pathAssembler;
|
||||
}
|
||||
|
||||
public Path createDist( WrapperConfiguration configuration )
|
||||
throws IOException, URISyntaxException
|
||||
{
|
||||
URI distributionUrl;
|
||||
String mvnwRepoUrl = System.getenv( MavenWrapperMain.MVNW_REPOURL );
|
||||
if ( mvnwRepoUrl != null && !mvnwRepoUrl.isEmpty() )
|
||||
{
|
||||
distributionUrl = new URI( mvnwRepoUrl + "/" + MavenWrapperMain.MVN_PATH );
|
||||
Logger.info( "Detected MVNW_REPOURL environment variable " + mvnwRepoUrl );
|
||||
}
|
||||
else
|
||||
{
|
||||
distributionUrl = configuration.getDistribution();
|
||||
}
|
||||
Logger.info( "Downloading Maven binary from " + distributionUrl );
|
||||
boolean alwaysDownload = configuration.isAlwaysDownload();
|
||||
boolean alwaysUnpack = configuration.isAlwaysUnpack();
|
||||
|
||||
PathAssembler.LocalDistribution localDistribution = pathAssembler.getDistribution( configuration );
|
||||
|
||||
Path localZipFile = localDistribution.getZipFile();
|
||||
boolean downloaded = false;
|
||||
if ( alwaysDownload || !Files.exists( localZipFile ) )
|
||||
{
|
||||
Path tmpZipFile = localZipFile.resolveSibling( localZipFile.getFileName() + ".part" );
|
||||
Files.deleteIfExists( tmpZipFile );
|
||||
Logger.info( "Downloading " + distributionUrl );
|
||||
download.download( distributionUrl, tmpZipFile );
|
||||
Files.move( tmpZipFile, localZipFile );
|
||||
downloaded = true;
|
||||
}
|
||||
|
||||
Path distDir = localDistribution.getDistributionDir();
|
||||
List<Path> dirs = listDirs( distDir );
|
||||
|
||||
if ( downloaded || alwaysUnpack || dirs.isEmpty() )
|
||||
{
|
||||
Files.walkFileTree( distDir.toAbsolutePath(), new SimpleFileVisitor<Path>()
|
||||
{
|
||||
@Override
|
||||
public FileVisitResult postVisitDirectory( Path dir, IOException exc )
|
||||
throws IOException
|
||||
{
|
||||
if ( dir.getParent().equals( distDir ) )
|
||||
{
|
||||
Logger.info( "Deleting directory " + distDir.toAbsolutePath() );
|
||||
Files.delete( dir );
|
||||
}
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
public FileVisitResult visitFile( Path file, BasicFileAttributes attrs )
|
||||
throws IOException
|
||||
{
|
||||
if ( !file.getParent().equals( distDir ) )
|
||||
{
|
||||
Files.delete( file );
|
||||
}
|
||||
return FileVisitResult.CONTINUE;
|
||||
};
|
||||
} );
|
||||
|
||||
Logger.info( "Unzipping " + localZipFile.toAbsolutePath() + " to " + distDir.toAbsolutePath() );
|
||||
unzip( localZipFile, distDir );
|
||||
|
||||
dirs = listDirs( distDir );
|
||||
if ( dirs.isEmpty() )
|
||||
{
|
||||
throw new RuntimeException( String.format(
|
||||
"Maven distribution '%s' does not contain any directories. Expected to find exactly 1 directory.",
|
||||
distributionUrl ) );
|
||||
}
|
||||
setExecutablePermissions( dirs.get( 0 ) );
|
||||
}
|
||||
if ( dirs.size() != 1 )
|
||||
{
|
||||
throw new IllegalStateException( String.format(
|
||||
"Maven distribution '%s' contains too many directories. Expected to find exactly 1 directory.",
|
||||
distributionUrl ) );
|
||||
}
|
||||
return dirs.get( 0 );
|
||||
}
|
||||
|
||||
private List<Path> listDirs( Path distDir ) throws IOException
|
||||
{
|
||||
try ( Stream<Path> stream = Files.walk( distDir, 1 ) )
|
||||
{
|
||||
return stream.filter( p -> !distDir.equals( p ) )
|
||||
.filter( Files::isDirectory )
|
||||
.collect( Collectors.toList() );
|
||||
}
|
||||
}
|
||||
|
||||
private void setExecutablePermissions( Path mavenHome )
|
||||
{
|
||||
if ( isWindows() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
Path mavenCommand = mavenHome.resolve( "bin/mvn" );
|
||||
String errorMessage = null;
|
||||
try
|
||||
{
|
||||
ProcessBuilder pb = new ProcessBuilder( "chmod", "755", mavenCommand.toString() );
|
||||
Process p = pb.start();
|
||||
if ( p.waitFor() == 0 )
|
||||
{
|
||||
Logger.info( "Set executable permissions for: " + mavenCommand.toString() );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
try ( BufferedReader is = new BufferedReader( new InputStreamReader( p.getInputStream() ) );
|
||||
Formatter stdout = new Formatter() )
|
||||
{
|
||||
String line;
|
||||
while ( ( line = is.readLine() ) != null )
|
||||
{
|
||||
stdout.format( "%s%n", line );
|
||||
}
|
||||
errorMessage = stdout.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch ( IOException | InterruptedException e )
|
||||
{
|
||||
errorMessage = e.getMessage();
|
||||
}
|
||||
if ( errorMessage != null )
|
||||
{
|
||||
Logger.warn( "Could not set executable permissions for: " + mavenCommand );
|
||||
Logger.warn( "Please do this manually if you want to use maven." );
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isWindows()
|
||||
{
|
||||
String osName = System.getProperty( "os.name" ).toLowerCase( Locale.US );
|
||||
|
||||
return ( osName.indexOf( "windows" ) > -1 );
|
||||
}
|
||||
|
||||
private void unzip( Path zip, Path dest )
|
||||
throws IOException
|
||||
{
|
||||
try ( ZipFile zipFile = new ZipFile( zip.toFile() ) )
|
||||
{
|
||||
Enumeration<? extends ZipEntry> entries = zipFile.entries();
|
||||
|
||||
while ( entries.hasMoreElements() )
|
||||
{
|
||||
ZipEntry entry = entries.nextElement();
|
||||
|
||||
if ( entry.isDirectory() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Path targetFile = dest.resolve( entry.getName() ).normalize();
|
||||
|
||||
// prevent Zip Slip
|
||||
if ( targetFile.startsWith( dest ) )
|
||||
{
|
||||
Files.createDirectories( targetFile.getParent() );
|
||||
|
||||
Files.copy( zipFile.getInputStream( entry ), targetFile );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:konstantin.sobolev@gmail.com">Konstantin Sobolev</a>
|
||||
*/
|
||||
public class Logger
|
||||
{
|
||||
private static final boolean VERBOSE = "true".equalsIgnoreCase( System.getenv( MavenWrapperMain.MVNW_VERBOSE ) );
|
||||
|
||||
public static void info( String msg )
|
||||
{
|
||||
if ( VERBOSE )
|
||||
{
|
||||
System.out.println( msg );
|
||||
}
|
||||
}
|
||||
|
||||
public static void warn( String msg )
|
||||
{
|
||||
System.out.println( msg );
|
||||
}
|
||||
}
|
|
@ -1,107 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Main entry point for the Maven Wrapper, delegating wrapper execution to {@link WrapperExecutor}.
|
||||
*
|
||||
* @author Hans Dockter
|
||||
*/
|
||||
public class MavenWrapperMain
|
||||
{
|
||||
private static final String POM_PROPERTIES = "/META-INF/maven/org.apache.maven/maven-wrapper/pom.properties";
|
||||
|
||||
public static final String DEFAULT_MAVEN_USER_HOME = System.getProperty( "user.home" ) + "/.m2";
|
||||
|
||||
public static final String MVNW_VERBOSE = "MVNW_VERBOSE";
|
||||
|
||||
public static final String MVNW_USERNAME = "MVNW_USERNAME";
|
||||
|
||||
public static final String MVNW_PASSWORD = "MVNW_PASSWORD";
|
||||
|
||||
public static final String MVNW_REPOURL = "MVNW_REPOURL";
|
||||
|
||||
public static final String MVN_PATH =
|
||||
"org/apache/maven/apache-maven/" + wrapperVersion() + "/apache-maven-" + wrapperVersion() + "-bin.zip";
|
||||
|
||||
public static void main( String[] args )
|
||||
throws Exception
|
||||
{
|
||||
Path wrapperJar = wrapperJar();
|
||||
Path propertiesFile = wrapperProperties( wrapperJar );
|
||||
|
||||
String wrapperVersion = wrapperVersion();
|
||||
Logger.info( "Apache Maven Wrapper " + wrapperVersion );
|
||||
|
||||
WrapperExecutor wrapperExecutor = WrapperExecutor.forWrapperPropertiesFile( propertiesFile );
|
||||
wrapperExecutor.execute( args, new Installer( new DefaultDownloader( "mvnw", wrapperVersion ),
|
||||
new PathAssembler( mavenUserHome() ) ),
|
||||
new BootstrapMainStarter() );
|
||||
}
|
||||
|
||||
private static Path wrapperProperties( Path wrapperJar ) throws URISyntaxException
|
||||
{
|
||||
return wrapperJar().resolveSibling( wrapperJar.getFileName().toString().replaceFirst( "\\.jar$",
|
||||
".properties" ) );
|
||||
}
|
||||
|
||||
private static Path wrapperJar() throws URISyntaxException
|
||||
{
|
||||
URI location = MavenWrapperMain.class.getProtectionDomain().getCodeSource().getLocation().toURI();
|
||||
|
||||
return Paths.get( location );
|
||||
}
|
||||
|
||||
static String wrapperVersion()
|
||||
{
|
||||
try ( InputStream resourceAsStream = MavenWrapperMain.class.getResourceAsStream( POM_PROPERTIES ) )
|
||||
{
|
||||
if ( resourceAsStream == null )
|
||||
{
|
||||
throw new IllegalStateException( POM_PROPERTIES + " not found." );
|
||||
}
|
||||
Properties mavenProperties = new Properties();
|
||||
mavenProperties.load( resourceAsStream );
|
||||
String version = mavenProperties.getProperty( "version" );
|
||||
if ( version == null )
|
||||
{
|
||||
throw new NullPointerException( "No version specified in " + POM_PROPERTIES );
|
||||
}
|
||||
return version;
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
throw new RuntimeException( "Could not determine wrapper version.", e );
|
||||
}
|
||||
}
|
||||
|
||||
private static Path mavenUserHome()
|
||||
{
|
||||
return Paths.get( DEFAULT_MAVEN_USER_HOME );
|
||||
}
|
||||
}
|
|
@ -1,131 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import java.net.URI;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
/**
|
||||
* @author Hans Dockter
|
||||
*/
|
||||
public class PathAssembler
|
||||
{
|
||||
public static final String MAVEN_USER_HOME_STRING = "MAVEN_USER_HOME";
|
||||
|
||||
public static final String PROJECT_STRING = "PROJECT";
|
||||
|
||||
private Path mavenUserHome;
|
||||
|
||||
public PathAssembler()
|
||||
{
|
||||
}
|
||||
|
||||
public PathAssembler( Path mavenUserHome )
|
||||
{
|
||||
this.mavenUserHome = mavenUserHome;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines the local locations for the distribution to use given the supplied configuration.
|
||||
*/
|
||||
public LocalDistribution getDistribution( WrapperConfiguration configuration )
|
||||
{
|
||||
String baseName = getDistName( configuration.getDistribution() );
|
||||
String rootDirName = removeExtension( baseName );
|
||||
Path distDir = getBaseDir( configuration.getDistributionBase() )
|
||||
.resolve( configuration.getDistributionPath() )
|
||||
.resolve( rootDirName );
|
||||
Path distZip = getBaseDir( configuration.getZipBase() )
|
||||
.resolve( configuration.getZipPath() )
|
||||
.resolve( rootDirName )
|
||||
.resolve( baseName );
|
||||
return new LocalDistribution( distDir, distZip );
|
||||
}
|
||||
|
||||
private String removeExtension( String name )
|
||||
{
|
||||
int p = name.lastIndexOf( "." );
|
||||
if ( p < 0 )
|
||||
{
|
||||
return name;
|
||||
}
|
||||
return name.substring( 0, p );
|
||||
}
|
||||
|
||||
private String getDistName( URI distUrl )
|
||||
{
|
||||
String path = distUrl.getPath();
|
||||
int p = path.lastIndexOf( "/" );
|
||||
if ( p < 0 )
|
||||
{
|
||||
return path;
|
||||
}
|
||||
return path.substring( p + 1 );
|
||||
}
|
||||
|
||||
private Path getBaseDir( String base )
|
||||
{
|
||||
if ( MAVEN_USER_HOME_STRING.equals( base ) )
|
||||
{
|
||||
return mavenUserHome;
|
||||
}
|
||||
else if ( PROJECT_STRING.equals( base ) )
|
||||
{
|
||||
return Paths.get( System.getProperty( "user.dir" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new IllegalArgumentException( "Base: " + base + " is unknown" );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The Local Distribution
|
||||
*/
|
||||
public class LocalDistribution
|
||||
{
|
||||
private final Path distZip;
|
||||
|
||||
private final Path distDir;
|
||||
|
||||
public LocalDistribution( Path distDir, Path distZip )
|
||||
{
|
||||
this.distDir = distDir;
|
||||
this.distZip = distZip;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the location to install the distribution into.
|
||||
*/
|
||||
public Path getDistributionDir()
|
||||
{
|
||||
return distDir;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the location to install the distribution ZIP file to.
|
||||
*/
|
||||
public Path getZipFile()
|
||||
{
|
||||
return distZip;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,116 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
/**
|
||||
* The Wrapper Configuration
|
||||
*/
|
||||
public class WrapperConfiguration
|
||||
{
|
||||
public static final String ALWAYS_UNPACK_ENV = "MAVEN_WRAPPER_ALWAYS_UNPACK";
|
||||
|
||||
public static final String ALWAYS_DOWNLOAD_ENV = "MAVEN_WRAPPER_ALWAYS_DOWNLOAD";
|
||||
|
||||
private boolean alwaysUnpack = Boolean.parseBoolean( System.getenv( ALWAYS_UNPACK_ENV ) );
|
||||
|
||||
private boolean alwaysDownload = Boolean.parseBoolean( System.getenv( ALWAYS_DOWNLOAD_ENV ) );
|
||||
|
||||
private URI distribution;
|
||||
|
||||
private String distributionBase = PathAssembler.MAVEN_USER_HOME_STRING;
|
||||
|
||||
private String distributionPath = Installer.DEFAULT_DISTRIBUTION_PATH;
|
||||
|
||||
private String zipBase = PathAssembler.MAVEN_USER_HOME_STRING;
|
||||
|
||||
private String zipPath = Installer.DEFAULT_DISTRIBUTION_PATH;
|
||||
|
||||
public boolean isAlwaysDownload()
|
||||
{
|
||||
return alwaysDownload;
|
||||
}
|
||||
|
||||
public void setAlwaysDownload( boolean alwaysDownload )
|
||||
{
|
||||
this.alwaysDownload = alwaysDownload;
|
||||
}
|
||||
|
||||
public boolean isAlwaysUnpack()
|
||||
{
|
||||
return alwaysUnpack;
|
||||
}
|
||||
|
||||
public void setAlwaysUnpack( boolean alwaysUnpack )
|
||||
{
|
||||
this.alwaysUnpack = alwaysUnpack;
|
||||
}
|
||||
|
||||
public URI getDistribution()
|
||||
{
|
||||
return distribution;
|
||||
}
|
||||
|
||||
public void setDistribution( URI distribution )
|
||||
{
|
||||
this.distribution = distribution;
|
||||
}
|
||||
|
||||
public String getDistributionBase()
|
||||
{
|
||||
return distributionBase;
|
||||
}
|
||||
|
||||
public void setDistributionBase( String distributionBase )
|
||||
{
|
||||
this.distributionBase = distributionBase;
|
||||
}
|
||||
|
||||
public String getDistributionPath()
|
||||
{
|
||||
return distributionPath;
|
||||
}
|
||||
|
||||
public void setDistributionPath( String distributionPath )
|
||||
{
|
||||
this.distributionPath = distributionPath;
|
||||
}
|
||||
|
||||
public String getZipBase()
|
||||
{
|
||||
return zipBase;
|
||||
}
|
||||
|
||||
public void setZipBase( String zipBase )
|
||||
{
|
||||
this.zipBase = zipBase;
|
||||
}
|
||||
|
||||
public String getZipPath()
|
||||
{
|
||||
return zipPath;
|
||||
}
|
||||
|
||||
public void setZipPath( String zipPath )
|
||||
{
|
||||
this.zipPath = zipPath;
|
||||
}
|
||||
}
|
|
@ -1,178 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Wrapper executor, running {@link Installer} to get a Maven distribution ready, followed by {@BootstrapMainStarter}
|
||||
* to launch the Maven bootstrap.
|
||||
*
|
||||
* @author Hans Dockter
|
||||
*/
|
||||
public class WrapperExecutor
|
||||
{
|
||||
public static final String DISTRIBUTION_URL_PROPERTY = "distributionUrl";
|
||||
|
||||
public static final String DISTRIBUTION_BASE_PROPERTY = "distributionBase";
|
||||
|
||||
public static final String ZIP_STORE_BASE_PROPERTY = "zipStoreBase";
|
||||
|
||||
public static final String DISTRIBUTION_PATH_PROPERTY = "distributionPath";
|
||||
|
||||
public static final String ZIP_STORE_PATH_PROPERTY = "zipStorePath";
|
||||
|
||||
private final Properties properties;
|
||||
|
||||
private final Path propertiesFile;
|
||||
|
||||
private final WrapperConfiguration config = new WrapperConfiguration();
|
||||
|
||||
public static WrapperExecutor forProjectDirectory( Path projectDir )
|
||||
{
|
||||
return new WrapperExecutor( projectDir.resolve( "maven/wrapper/maven-wrapper.properties" ),
|
||||
new Properties() );
|
||||
}
|
||||
|
||||
public static WrapperExecutor forWrapperPropertiesFile( Path propertiesFile )
|
||||
{
|
||||
if ( !Files.exists( propertiesFile ) )
|
||||
{
|
||||
throw new RuntimeException( String.format( "Wrapper properties file '%s' does not exist.",
|
||||
propertiesFile ) );
|
||||
}
|
||||
return new WrapperExecutor( propertiesFile, new Properties() );
|
||||
}
|
||||
|
||||
WrapperExecutor( Path propertiesFile, Properties properties )
|
||||
{
|
||||
this.properties = properties;
|
||||
this.propertiesFile = propertiesFile;
|
||||
if ( Files.exists( propertiesFile ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
loadProperties( propertiesFile, properties );
|
||||
config.setDistribution( prepareDistributionUri() );
|
||||
config.setDistributionBase( getProperty( DISTRIBUTION_BASE_PROPERTY, config.getDistributionBase() ) );
|
||||
config.setDistributionPath( getProperty( DISTRIBUTION_PATH_PROPERTY, config.getDistributionPath() ) );
|
||||
config.setZipBase( getProperty( ZIP_STORE_BASE_PROPERTY, config.getZipBase() ) );
|
||||
config.setZipPath( getProperty( ZIP_STORE_PATH_PROPERTY, config.getZipPath() ) );
|
||||
}
|
||||
catch ( IOException | URISyntaxException e )
|
||||
{
|
||||
throw new RuntimeException( String.format( "Could not load wrapper properties from '%s'.",
|
||||
propertiesFile ),
|
||||
e );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private URI prepareDistributionUri()
|
||||
throws URISyntaxException
|
||||
{
|
||||
URI source = readDistroUrl();
|
||||
if ( source.getScheme() == null )
|
||||
{
|
||||
// no scheme means someone passed a relative url. In our context only file relative urls make sense.
|
||||
return propertiesFile.getParent().resolve( source.getSchemeSpecificPart() ).toUri();
|
||||
}
|
||||
else
|
||||
{
|
||||
return source;
|
||||
}
|
||||
}
|
||||
|
||||
private URI readDistroUrl()
|
||||
throws URISyntaxException
|
||||
{
|
||||
if ( properties.getProperty( DISTRIBUTION_URL_PROPERTY ) != null )
|
||||
{
|
||||
return new URI( getProperty( DISTRIBUTION_URL_PROPERTY ) );
|
||||
}
|
||||
|
||||
reportMissingProperty( DISTRIBUTION_URL_PROPERTY );
|
||||
return null; // previous line will fail
|
||||
}
|
||||
|
||||
private static void loadProperties( Path propertiesFile, Properties properties )
|
||||
throws IOException
|
||||
{
|
||||
try ( InputStream inStream = Files.newInputStream( propertiesFile ) )
|
||||
{
|
||||
properties.load( inStream );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the distribution which this wrapper will use. Returns null if no wrapper meta-data was found in the
|
||||
* specified project directory.
|
||||
*/
|
||||
public URI getDistribution()
|
||||
{
|
||||
return config.getDistribution();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the configuration for this wrapper.
|
||||
*/
|
||||
public WrapperConfiguration getConfiguration()
|
||||
{
|
||||
return config;
|
||||
}
|
||||
|
||||
public void execute( String[] args, Installer install, BootstrapMainStarter bootstrapMainStarter )
|
||||
throws Exception
|
||||
{
|
||||
Path mavenHome = install.createDist( config );
|
||||
bootstrapMainStarter.start( args, mavenHome );
|
||||
}
|
||||
|
||||
private String getProperty( String propertyName )
|
||||
{
|
||||
return getProperty( propertyName, null );
|
||||
}
|
||||
|
||||
private String getProperty( String propertyName, String defaultValue )
|
||||
{
|
||||
String value = properties.getProperty( propertyName );
|
||||
if ( value != null )
|
||||
{
|
||||
return value;
|
||||
}
|
||||
if ( defaultValue != null )
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
return reportMissingProperty( propertyName );
|
||||
}
|
||||
|
||||
private String reportMissingProperty( String propertyName )
|
||||
{
|
||||
throw new RuntimeException( String.format( "No value with key '%s' specified in wrapper properties file '%s'.",
|
||||
propertyName, propertiesFile ) );
|
||||
}
|
||||
}
|
|
@ -1,30 +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.
|
||||
|
||||
-----
|
||||
Introduction
|
||||
-----
|
||||
Hervé Boutemy
|
||||
-----
|
||||
2021-04-05
|
||||
-----
|
||||
|
||||
Maven Wrapper
|
||||
|
||||
Maven Wrapper dowloads Maven distribution if not already in cache, installs it, then launches Maven: Maven distributions installed by Maven Wrapper are stored under <<<~/.m2/wrapper/dists>>> by default.
|
||||
|
||||
Maven Wrapper is called by {{{../apache-maven-wrapper/}<<<mvnw>>>/<<<mvnw.cmd>>> scripts}} that need to be installed in the project source tree and called instead of <<<mvn>>>/<<<mvn.cmd>>>.
|
|
@ -1,38 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/DECORATION/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.8.0 http://maven.apache.org/xsd/decoration-1.8.0.xsd">
|
||||
|
||||
<edit>${project.scm.url}</edit>
|
||||
|
||||
<body>
|
||||
<menu name="Overview">
|
||||
<item name="Introduction" href="index.html"/>
|
||||
<item name="JavaDocs" href="apidocs/index.html"/>
|
||||
<item name="Source Xref" href="xref/index.html"/>
|
||||
<!--item name="FAQ" href="faq.html"/-->
|
||||
</menu>
|
||||
|
||||
<menu ref="parent"/>
|
||||
<menu ref="reports"/>
|
||||
</body>
|
||||
</project>
|
|
@ -1,71 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import java.net.URI;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
public class DownloaderTest
|
||||
{
|
||||
@TempDir
|
||||
public Path testDir;
|
||||
|
||||
private DefaultDownloader download;
|
||||
|
||||
private Path downloadFile;
|
||||
|
||||
private Path rootDir;
|
||||
|
||||
private URI sourceRoot;
|
||||
|
||||
private Path remoteFile;
|
||||
|
||||
@BeforeEach
|
||||
public void setUp()
|
||||
throws Exception
|
||||
{
|
||||
download = new DefaultDownloader( "mvnw", "aVersion" );
|
||||
rootDir = testDir.resolve( "root" );
|
||||
downloadFile = rootDir.resolve( "file" );
|
||||
remoteFile = testDir.resolve( "remoteFile" );
|
||||
Files.write( remoteFile, Arrays.asList( "sometext" ) );
|
||||
sourceRoot = remoteFile.toUri();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDownload()
|
||||
throws Exception
|
||||
{
|
||||
assert !Files.exists( downloadFile );
|
||||
download.download( sourceRoot, downloadFile );
|
||||
assert Files.exists( downloadFile );
|
||||
assertEquals( "sometext",
|
||||
Files.readAllLines( downloadFile ).stream().collect( Collectors.joining() ) );
|
||||
}
|
||||
}
|
|
@ -1,214 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URI;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.apache.tools.ant.Project;
|
||||
import org.apache.tools.ant.taskdefs.Zip;
|
||||
import org.junit.Assert;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
/**
|
||||
* @author Hans Dockter
|
||||
*/
|
||||
public class InstallerTest
|
||||
{
|
||||
@TempDir
|
||||
public Path temporaryFolder;
|
||||
|
||||
private Installer install;
|
||||
|
||||
private Path distributionDir;
|
||||
|
||||
private Path zipStore;
|
||||
|
||||
private Path mavenHomeDir;
|
||||
|
||||
private Path zipDestination;
|
||||
|
||||
private WrapperConfiguration configuration = new WrapperConfiguration();
|
||||
|
||||
private Downloader download;
|
||||
|
||||
private PathAssembler pathAssembler;
|
||||
|
||||
private PathAssembler.LocalDistribution localDistribution;
|
||||
|
||||
@BeforeEach
|
||||
public void setup()
|
||||
throws Exception
|
||||
{
|
||||
configuration.setZipBase( PathAssembler.PROJECT_STRING );
|
||||
configuration.setZipPath( "someZipPath" );
|
||||
configuration.setDistributionBase( PathAssembler.MAVEN_USER_HOME_STRING );
|
||||
configuration.setDistributionPath( "someDistPath" );
|
||||
configuration.setDistribution( new URI( "http://server/maven-0.9.zip" ) );
|
||||
configuration.setAlwaysDownload( false );
|
||||
configuration.setAlwaysUnpack( false );
|
||||
distributionDir = temporaryFolder.resolve( "someDistPath" );
|
||||
Files.createDirectories( distributionDir );
|
||||
mavenHomeDir = distributionDir.resolve( "maven-0.9" );
|
||||
zipStore = temporaryFolder.resolve( "zips" );
|
||||
Files.createDirectories( zipStore );
|
||||
zipDestination = zipStore.resolve( "maven-0.9.zip" );
|
||||
|
||||
download = mock( Downloader.class );
|
||||
pathAssembler = mock( PathAssembler.class );
|
||||
localDistribution = mock( PathAssembler.LocalDistribution.class );
|
||||
|
||||
when( localDistribution.getZipFile() ).thenReturn( zipDestination );
|
||||
when( localDistribution.getDistributionDir() ).thenReturn( distributionDir );
|
||||
when( pathAssembler.getDistribution( configuration ) ).thenReturn( localDistribution );
|
||||
|
||||
install = new Installer( download, pathAssembler );
|
||||
}
|
||||
|
||||
private void createTestZip( Path zipDestination )
|
||||
throws Exception
|
||||
{
|
||||
Files.createDirectories( zipDestination.getParent() );
|
||||
|
||||
Path explodedZipDir = temporaryFolder.resolve( "explodedZip" );
|
||||
|
||||
Path mavenScript = explodedZipDir.resolve( "maven-0.9/bin/mvn" );
|
||||
Files.createDirectories( mavenScript.getParent() );
|
||||
Files.write( mavenScript, Arrays.asList( "something" ) );
|
||||
|
||||
zipTo( explodedZipDir, zipDestination );
|
||||
}
|
||||
|
||||
@Test
|
||||
@Disabled("not working")
|
||||
public void testCreateDist()
|
||||
throws Exception
|
||||
{
|
||||
Path homeDir = install.createDist( configuration );
|
||||
|
||||
Assert.assertEquals( mavenHomeDir, homeDir );
|
||||
Assert.assertTrue( Files.isDirectory( homeDir ) );
|
||||
Assert.assertTrue( Files.exists( homeDir.resolve( "bin/mvn" ) ) );
|
||||
Assert.assertTrue( Files.exists( zipDestination ) );
|
||||
|
||||
Assert.assertEquals( localDistribution, pathAssembler.getDistribution( configuration ) );
|
||||
Assert.assertEquals( distributionDir, localDistribution.getDistributionDir() );
|
||||
Assert.assertEquals( zipDestination, localDistribution.getZipFile() );
|
||||
|
||||
// download.download(new URI("http://some/test"), distributionDir);
|
||||
// verify(download).download(new URI("http://some/test"), distributionDir);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateDistWithExistingDistribution()
|
||||
throws Exception
|
||||
{
|
||||
Files.createFile( zipDestination );
|
||||
|
||||
Files.createDirectories( mavenHomeDir );
|
||||
Path someFile = mavenHomeDir.resolve( "some-file" );
|
||||
Files.createFile( someFile );
|
||||
|
||||
Path homeDir = install.createDist( configuration );
|
||||
|
||||
Assert.assertEquals( mavenHomeDir, homeDir );
|
||||
Assert.assertTrue( Files.isDirectory( mavenHomeDir ) );
|
||||
Assert.assertTrue( Files.exists( homeDir.resolve( "some-file" ) ) );
|
||||
Assert.assertTrue( Files.exists( zipDestination ) );
|
||||
|
||||
Assert.assertEquals( localDistribution, pathAssembler.getDistribution( configuration ) );
|
||||
Assert.assertEquals( distributionDir, localDistribution.getDistributionDir() );
|
||||
Assert.assertEquals( zipDestination, localDistribution.getZipFile() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateDistWithExistingDistAndZipAndAlwaysUnpackTrue()
|
||||
throws Exception
|
||||
{
|
||||
|
||||
createTestZip( zipDestination );
|
||||
Files.createDirectories( mavenHomeDir );
|
||||
File garbage = mavenHomeDir.resolve( "garbage" ).toFile();
|
||||
Files.createFile( garbage.toPath() );
|
||||
|
||||
configuration.setAlwaysUnpack( true );
|
||||
|
||||
Path homeDir = install.createDist( configuration );
|
||||
|
||||
Assert.assertEquals( mavenHomeDir, homeDir );
|
||||
Assert.assertTrue( Files.isDirectory( mavenHomeDir ) );
|
||||
Assert.assertFalse( Files.exists( homeDir.resolve( "garbage" ) ) );
|
||||
Assert.assertTrue( Files.exists( zipDestination ) );
|
||||
|
||||
Assert.assertEquals( localDistribution, pathAssembler.getDistribution( configuration ) );
|
||||
Assert.assertEquals( distributionDir, localDistribution.getDistributionDir() );
|
||||
Assert.assertEquals( zipDestination, localDistribution.getZipFile() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateDistWithExistingZipAndDistAndAlwaysDownloadTrue()
|
||||
throws Exception
|
||||
{
|
||||
|
||||
createTestZip( zipDestination );
|
||||
Files.createDirectories( mavenHomeDir );
|
||||
File garbage = mavenHomeDir.resolve( "garbage" ).toFile();
|
||||
Files.createFile( garbage.toPath() );
|
||||
|
||||
configuration.setAlwaysUnpack( true );
|
||||
|
||||
Path homeDir = install.createDist( configuration );
|
||||
|
||||
Assert.assertEquals( mavenHomeDir, homeDir );
|
||||
Assert.assertTrue( Files.isDirectory( mavenHomeDir ) );
|
||||
Assert.assertTrue( Files.exists( homeDir.resolve( "bin/mvn" ) ) );
|
||||
Assert.assertFalse( Files.exists( homeDir.resolve( "garbage" ) ) );
|
||||
Assert.assertTrue( Files.exists( zipDestination ) );
|
||||
|
||||
Assert.assertEquals( localDistribution, pathAssembler.getDistribution( configuration ) );
|
||||
Assert.assertEquals( distributionDir, localDistribution.getDistributionDir() );
|
||||
Assert.assertEquals( zipDestination, localDistribution.getZipFile() );
|
||||
|
||||
// download.download(new URI("http://some/test"), distributionDir);
|
||||
// verify(download).download(new URI("http://some/test"), distributionDir);
|
||||
}
|
||||
|
||||
public void zipTo( Path directoryToZip, Path zipFile )
|
||||
{
|
||||
Zip zip = new Zip();
|
||||
zip.setBasedir( directoryToZip.toFile() );
|
||||
zip.setDestFile( zipFile.toFile() );
|
||||
zip.setProject( new Project() );
|
||||
|
||||
Zip.WhenEmpty whenEmpty = new Zip.WhenEmpty();
|
||||
whenEmpty.setValue( "create" );
|
||||
zip.setWhenempty( whenEmpty );
|
||||
zip.execute();
|
||||
}
|
||||
}
|
|
@ -1,115 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import java.net.URI;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* @author Hans Dockter
|
||||
*/
|
||||
public class PathAssemblerTest
|
||||
{
|
||||
public static final String TEST_MAVEN_USER_HOME = "someUserHome";
|
||||
|
||||
private PathAssembler pathAssembler = new PathAssembler( Paths.get( TEST_MAVEN_USER_HOME ) );
|
||||
|
||||
final WrapperConfiguration configuration = new WrapperConfiguration();
|
||||
|
||||
@BeforeEach
|
||||
public void setup()
|
||||
{
|
||||
configuration.setDistributionBase( PathAssembler.MAVEN_USER_HOME_STRING );
|
||||
configuration.setDistributionPath( "somePath" );
|
||||
configuration.setZipBase( PathAssembler.MAVEN_USER_HOME_STRING );
|
||||
configuration.setZipPath( "somePath" );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void distributionDirWithMavenUserHomeBase()
|
||||
throws Exception
|
||||
{
|
||||
configuration.setDistribution( new URI( "http://server/dist/maven-0.9-bin.zip" ) );
|
||||
|
||||
Path distributionDir = pathAssembler.getDistribution( configuration ).getDistributionDir();
|
||||
assertThat( distributionDir, is( Paths.get( TEST_MAVEN_USER_HOME, "/somePath/maven-0.9-bin" ) ) );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void distributionDirWithProjectBase()
|
||||
throws Exception
|
||||
{
|
||||
configuration.setDistributionBase( PathAssembler.PROJECT_STRING );
|
||||
configuration.setDistribution( new URI( "http://server/dist/maven-0.9-bin.zip" ) );
|
||||
|
||||
Path distributionDir = pathAssembler.getDistribution( configuration ).getDistributionDir();
|
||||
assertThat( distributionDir, equalTo( Paths.get( currentDirPath(), "/somePath/maven-0.9-bin" ) ) );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void distributionDirWithUnknownBase()
|
||||
throws Exception
|
||||
{
|
||||
configuration.setDistribution( new URI( "http://server/dist/maven-1.0.zip" ) );
|
||||
configuration.setDistributionBase( "unknownBase" );
|
||||
|
||||
RuntimeException e =
|
||||
assertThrows( RuntimeException.class, () -> pathAssembler.getDistribution( configuration ) );
|
||||
assertEquals( "Base: unknownBase is unknown", e.getMessage() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void distZipWithMavenUserHomeBase()
|
||||
throws Exception
|
||||
{
|
||||
configuration.setDistribution( new URI( "http://server/dist/maven-1.0.zip" ) );
|
||||
|
||||
Path dist = pathAssembler.getDistribution( configuration ).getZipFile();
|
||||
assertThat( dist.getFileName().toString(), equalTo( "maven-1.0.zip" ) );
|
||||
assertThat( dist.getParent(), equalTo( Paths.get( TEST_MAVEN_USER_HOME, "/somePath/maven-1.0" ) ) );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void distZipWithProjectBase()
|
||||
throws Exception
|
||||
{
|
||||
configuration.setZipBase( PathAssembler.PROJECT_STRING );
|
||||
configuration.setDistribution( new URI( "http://server/dist/maven-1.0.zip" ) );
|
||||
|
||||
Path dist = pathAssembler.getDistribution( configuration ).getZipFile();
|
||||
assertThat( dist.getFileName().toString(), equalTo( "maven-1.0.zip" ) );
|
||||
assertThat( dist.getParent(), equalTo( Paths.get( currentDirPath(), "/somePath/maven-1.0" ) ) );
|
||||
}
|
||||
|
||||
private String currentDirPath()
|
||||
{
|
||||
return System.getProperty( "user.dir" );
|
||||
}
|
||||
}
|
|
@ -1,202 +0,0 @@
|
|||
package org.apache.maven.wrapper;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URI;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
public class WrapperExecutorTest
|
||||
{
|
||||
@TempDir
|
||||
public Path testDir;
|
||||
|
||||
private Installer install;
|
||||
|
||||
private BootstrapMainStarter start;
|
||||
|
||||
private Path propertiesFile;
|
||||
|
||||
private Properties properties = new Properties();
|
||||
|
||||
private Path mockInstallDir;
|
||||
|
||||
@BeforeEach
|
||||
public void setUp()
|
||||
throws Exception
|
||||
{
|
||||
mockInstallDir = testDir.resolve( "mock-dir" );
|
||||
|
||||
install = mock( Installer.class );
|
||||
when( install.createDist( Mockito.any( WrapperConfiguration.class ) ) ).thenReturn( mockInstallDir );
|
||||
start = mock( BootstrapMainStarter.class );
|
||||
|
||||
propertiesFile = testDir.resolve( "maven" ).resolve( "wrapper" ).resolve( "maven-wrapper.properties" );
|
||||
|
||||
properties.put( "distributionUrl", "http://server/test/maven.zip" );
|
||||
properties.put( "distributionBase", "testDistBase" );
|
||||
properties.put( "distributionPath", "testDistPath" );
|
||||
properties.put( "zipStoreBase", "testZipBase" );
|
||||
properties.put( "zipStorePath", "testZipPath" );
|
||||
|
||||
writePropertiesFile( properties, propertiesFile, "header" );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadWrapperMetadataFromFile()
|
||||
throws Exception
|
||||
{
|
||||
WrapperExecutor wrapper = WrapperExecutor.forWrapperPropertiesFile( propertiesFile );
|
||||
|
||||
assertEquals( new URI( "http://server/test/maven.zip" ), wrapper.getDistribution() );
|
||||
assertEquals( new URI( "http://server/test/maven.zip" ), wrapper.getConfiguration().getDistribution() );
|
||||
assertEquals( "testDistBase", wrapper.getConfiguration().getDistributionBase() );
|
||||
assertEquals( "testDistPath", wrapper.getConfiguration().getDistributionPath() );
|
||||
assertEquals( "testZipBase", wrapper.getConfiguration().getZipBase() );
|
||||
assertEquals( "testZipPath", wrapper.getConfiguration().getZipPath() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadWrapperMetadataFromDirectory()
|
||||
throws Exception
|
||||
{
|
||||
WrapperExecutor wrapper = WrapperExecutor.forProjectDirectory( testDir );
|
||||
|
||||
assertEquals( new URI( "http://server/test/maven.zip" ), wrapper.getDistribution() );
|
||||
assertEquals( new URI( "http://server/test/maven.zip" ), wrapper.getConfiguration().getDistribution() );
|
||||
assertEquals( "testDistBase", wrapper.getConfiguration().getDistributionBase() );
|
||||
assertEquals( "testDistPath", wrapper.getConfiguration().getDistributionPath() );
|
||||
assertEquals( "testZipBase", wrapper.getConfiguration().getZipBase() );
|
||||
assertEquals( "testZipPath", wrapper.getConfiguration().getZipPath() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void useDefaultMetadataNoProeprtiesFile()
|
||||
throws Exception
|
||||
{
|
||||
WrapperExecutor wrapper = WrapperExecutor.forProjectDirectory( testDir.resolve( "unknown" ) );
|
||||
|
||||
assertNull( wrapper.getDistribution() );
|
||||
assertNull( wrapper.getConfiguration().getDistribution() );
|
||||
assertEquals( PathAssembler.MAVEN_USER_HOME_STRING, wrapper.getConfiguration().getDistributionBase() );
|
||||
assertEquals( Installer.DEFAULT_DISTRIBUTION_PATH, wrapper.getConfiguration().getDistributionPath() );
|
||||
assertEquals( PathAssembler.MAVEN_USER_HOME_STRING, wrapper.getConfiguration().getZipBase() );
|
||||
assertEquals( Installer.DEFAULT_DISTRIBUTION_PATH, wrapper.getConfiguration().getZipPath() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void propertiesFileOnlyContainsDistURL()
|
||||
throws Exception
|
||||
{
|
||||
|
||||
properties = new Properties();
|
||||
properties.put( "distributionUrl", "http://server/test/maven.zip" );
|
||||
writePropertiesFile( properties, propertiesFile, "header" );
|
||||
|
||||
WrapperExecutor wrapper = WrapperExecutor.forWrapperPropertiesFile( propertiesFile );
|
||||
|
||||
assertEquals( new URI( "http://server/test/maven.zip" ), wrapper.getDistribution() );
|
||||
assertEquals( new URI( "http://server/test/maven.zip" ), wrapper.getConfiguration().getDistribution() );
|
||||
assertEquals( PathAssembler.MAVEN_USER_HOME_STRING, wrapper.getConfiguration().getDistributionBase() );
|
||||
assertEquals( Installer.DEFAULT_DISTRIBUTION_PATH, wrapper.getConfiguration().getDistributionPath() );
|
||||
assertEquals( PathAssembler.MAVEN_USER_HOME_STRING, wrapper.getConfiguration().getZipBase() );
|
||||
assertEquals( Installer.DEFAULT_DISTRIBUTION_PATH, wrapper.getConfiguration().getZipPath() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void executeInstallAndLaunch()
|
||||
throws Exception
|
||||
{
|
||||
WrapperExecutor wrapper = WrapperExecutor.forProjectDirectory( propertiesFile );
|
||||
|
||||
wrapper.execute( new String[] { "arg" }, install, start );
|
||||
verify( install ).createDist( Mockito.any( WrapperConfiguration.class ) );
|
||||
verify( start ).start( new String[] { "arg" }, mockInstallDir );
|
||||
}
|
||||
|
||||
@Test( )
|
||||
public void failWhenDistNotSetInProperties()
|
||||
throws Exception
|
||||
{
|
||||
properties = new Properties();
|
||||
writePropertiesFile( properties, propertiesFile, "header" );
|
||||
|
||||
RuntimeException e = assertThrows(
|
||||
RuntimeException.class,
|
||||
() -> WrapperExecutor.forWrapperPropertiesFile( propertiesFile ),
|
||||
"Expected RuntimeException" );
|
||||
assertEquals( "No value with key 'distributionUrl' specified in wrapper properties file '"
|
||||
+ propertiesFile + "'.", e.getMessage() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void failWhenPropertiesFileDoesNotExist()
|
||||
{
|
||||
propertiesFile = testDir.resolve( "unknown.properties" );
|
||||
|
||||
RuntimeException e = assertThrows(
|
||||
RuntimeException.class,
|
||||
() -> WrapperExecutor.forWrapperPropertiesFile( propertiesFile ),
|
||||
"Expected RuntimeException" );
|
||||
assertEquals( "Wrapper properties file '" + propertiesFile + "' does not exist.", e.getMessage() );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRelativeDistUrl()
|
||||
throws Exception
|
||||
{
|
||||
|
||||
properties = new Properties();
|
||||
properties.put( "distributionUrl", "some/relative/url/to/bin.zip" );
|
||||
writePropertiesFile( properties, propertiesFile, "header" );
|
||||
|
||||
WrapperExecutor wrapper = WrapperExecutor.forWrapperPropertiesFile( propertiesFile );
|
||||
assertNotEquals( "some/relative/url/to/bin.zip", wrapper.getDistribution().getSchemeSpecificPart() );
|
||||
assertTrue( wrapper.getDistribution().getSchemeSpecificPart().endsWith( "some/relative/url/to/bin.zip" ) );
|
||||
}
|
||||
|
||||
private void writePropertiesFile( Properties properties, Path propertiesFile, String message )
|
||||
throws IOException
|
||||
{
|
||||
Files.createDirectories( propertiesFile.getParent() );
|
||||
|
||||
try ( OutputStream outStream = Files.newOutputStream( propertiesFile ) )
|
||||
{
|
||||
properties.store( outStream, message );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,21 +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.
|
||||
distributionUrl=http://server/test/maven.zip
|
||||
distributionBase=testDistBase
|
||||
zipStoreBase=testZipBase
|
||||
distributionPath=testDistPath
|
||||
zipStorePath=testZipPath
|
2
pom.xml
2
pom.xml
|
@ -96,8 +96,6 @@ under the License.
|
|||
<module>maven-embedder</module>
|
||||
<module>maven-compat</module>
|
||||
<module>apache-maven</module> <!-- rename to apache-maven/maven.pom after RAT-268 -->
|
||||
<module>maven-wrapper</module>
|
||||
<module>apache-maven-wrapper</module>
|
||||
<module>maven-toolchain-model</module>
|
||||
<module>maven-toolchain-builder</module>
|
||||
</modules>
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 165 KiB |
|
@ -40,46 +40,43 @@ under the License.
|
|||
process.</p>
|
||||
|
||||
<p>
|
||||
<img src="images/maven-deps.png" width="1046" height="784" border="0" usemap="#Maven_dependencies" />
|
||||
<img src="images/maven-deps.png" width="1242" height="789" border="0" usemap="#Maven_dependencies" />
|
||||
<map name="Maven_dependencies">
|
||||
<area shape="rect" coords="433,1,658,41" alt="apache-maven-wrapper" href="apache-maven-wrapper/" />
|
||||
<area shape="rect" coords="711,0,959,40" alt="maven-wrapper-plugin" href="/plugins/maven-wrapper-plugin/" />
|
||||
<area shape="rect" coords="488,67,604,107" alt="maven-wrapper" href="maven-wrapper/" />
|
||||
<area shape="rect" coords="378,132,467,172" alt="maven-bom" href="maven-bom/" />
|
||||
<area shape="rect" coords="257,67,407,107" alt="apache-maven" href="apache-maven/" />
|
||||
<area shape="rect" coords="257,198,407,237" alt="maven-embedder" href="maven-embedder/" />
|
||||
<area shape="rect" coords="259,264,406,304" alt="maven-compat" href="maven-compat/" />
|
||||
<area shape="rect" coords="258,329,406,369" alt="maven-core" href="maven-core/" />
|
||||
<area shape="rect" coords="152,540,328,581" alt="maven-resolver-provider" href="maven-resolver-provider/" />
|
||||
<area shape="rect" coords="205,742,423,783" alt="maven-repository-metadata" href="maven-repository-metadata/" />
|
||||
<area shape="rect" coords="488,329,597,369" alt="maven-plugin-api" href="maven-plugin-api/" />
|
||||
<area shape="rect" coords="556,743,650,782" alt="maven-artifact" href="maven-artifact/" />
|
||||
<area shape="rect" coords="342,559,507,600" alt="maven-builder-support" href="maven-builder-support/" />
|
||||
<area shape="rect" coords="342,395,507,435" alt="maven-settings-builder" href="maven-settings-builder/" />
|
||||
<area shape="rect" coords="318,460,412,501" alt="maven-settings" href="maven-settings/" />
|
||||
<area shape="rect" coords="341,626,490,665" alt="maven-model-builder" href="maven-model-builder/" />
|
||||
<area shape="rect" coords="317,690,491,730" alt="maven-model-transform" href="maven-model-transform/" />
|
||||
<area shape="rect" coords="447,743,550,782" alt="maven-model" href="maven-model/" />
|
||||
<area shape="rect" coords="675,742,822,783" alt="maven-test-support" href="maven-test-support/" />
|
||||
<area shape="rect" coords="64,67,211,107" alt="maven-slf4j-provider" href="maven-slf4j-provider/" />
|
||||
<area shape="rect" coords="64,132,211,172" alt="maven-slf4j-wrapper" href="maven-slf4j-wrapper/" />
|
||||
<area shape="rect" coords="1,621,193,782" alt="maven-resolver" href="https://maven.apache.org/resolver/" />
|
||||
<area shape="rect" coords="79,198,196,238" alt="slf4j-api" href="http://www.slf4j.org/manual.html" />
|
||||
<area shape="rect" coords="620,198,796,239" alt="commons-cli" href="http://commons.apache.org/cli/" />
|
||||
<area shape="rect" coords="100,328,230,368" alt="maven-shared-utils" href="https://maven.apache.org/shared/maven-shared-utils/" />
|
||||
<area shape="rect" coords="1,329,79,369" alt="jansi" href="http://fusesource.github.io/jansi/" />
|
||||
<area shape="rect" coords="0,395,79,435" alt="jansi-native" href="https://github.com/fusesource/jansi-native" />
|
||||
<area shape="rect" coords="620,263,832,304" alt="wagon-provider-api" href="https://maven.apache.org/wagon/wagon-provider-api/" />
|
||||
<area shape="rect" coords="629,513,787,554" alt="plexus-sec-dispatcher" href="https://github.com/codehaus-plexus/plexus-sec-dispatcher" />
|
||||
<area shape="rect" coords="814,513,903,554" alt="plexus-cipher" href="https://github.com/codehaus-plexus/plexus-cipher" />
|
||||
<area shape="rect" coords="634,588,777,629" alt="plexus-interpolation" href="https://codehaus-plexus.github.io/plexus-interpolation" />
|
||||
<area shape="rect" coords="629,455,883,496" alt="plexus-component-annotations" href="https://codehaus-plexus.github.io/plexus-containers" />
|
||||
<area shape="rect" coords="898,456,1033,497" alt="plexus-classworlds" href="https://codehaus-plexus.github.io/plexus-classworlds" />
|
||||
<area shape="rect" coords="921,588,1024,628" alt="plexus-utils" href="https://codehaus-plexus.github.io/plexus-utils" />
|
||||
<area shape="rect" coords="620,442,1045,671" alt="plexus" href="https://codehaus-plexus.github.io/" />
|
||||
<area shape="rect" coords="620,315,873,413" alt="sisu" href="http://www.eclipse.org/projects/project_summary.php?projectid=technology.sisu" />
|
||||
<area shape="rect" coords="935,328,1020,370" alt="guice" href="http://code.google.com/p/google-guice/" />
|
||||
<area shape="rect" coords="907,390,1045,431" alt="javax.inject" href="http://docs.oracle.com/javaee/6/api/javax/inject/package-summary.html" />
|
||||
<area shape="rect" coords="542,1,631,40" alt="maven-bom" href="maven-bom/" />
|
||||
<area shape="rect" coords="256,0,408,42" alt="apache-maven" href="apache-maven/" />
|
||||
<area shape="rect" coords="255,130,406,171" alt="maven-embedder" href="maven-embedder/" />
|
||||
<area shape="rect" coords="255,195,407,239" alt="maven-compat" href="maven-compat/" />
|
||||
<area shape="rect" coords="375,262,525,305" alt="maven-core" href="maven-core/" />
|
||||
<area shape="rect" coords="150,545,329,587" alt="maven-resolver-provider" href="maven-resolver-provider/" />
|
||||
<area shape="rect" coords="206,748,421,787" alt="maven-repository-metadata" href="maven-repository-metadata/" />
|
||||
<area shape="rect" coords="683,260,794,303" alt="maven-plugin-api" href="maven-plugin-api/" />
|
||||
<area shape="rect" coords="477,328,657,368" alt="maven-toolchain-builder" href="maven-toolchain-builder/" />
|
||||
<area shape="rect" coords="480,387,654,430" alt="maven-toolchain-model" href="maven-toolchain-model/" />
|
||||
<area shape="rect" coords="752,746,845,787" alt="maven-artifact" href="maven-artifact/" />
|
||||
<area shape="rect" coords="485,544,649,584" alt="maven-builder-support" href="maven-builder-support/" />
|
||||
<area shape="rect" coords="306,437,471,479" alt="maven-settings-builder" href="maven-settings-builder/" />
|
||||
<area shape="rect" coords="340,520,435,562" alt="maven-settings" href="maven-settings/" />
|
||||
<area shape="rect" coords="488,628,643,671" alt="maven-model-builder" href="maven-model-builder/" />
|
||||
<area shape="rect" coords="319,695,490,737" alt="maven-model-transform" href="maven-model-transform/" />
|
||||
<area shape="rect" coords="643,747,744,789" alt="maven-model" href="maven-model/" />
|
||||
<area shape="rect" coords="62,0,211,41" alt="maven-slf4j-provider" href="maven-slf4j-provider/" />
|
||||
<area shape="rect" coords="63,65,210,108" alt="maven-slf4j-wrapper" href="maven-slf4j-wrapper/" />
|
||||
<area shape="rect" coords="1,625,195,787" alt="maven-resolver" href="https://maven.apache.org/resolver/" />
|
||||
<area shape="rect" coords="78,132,194,171" alt="slf4j-api" href="http://www.slf4j.org/manual.html" />
|
||||
<area shape="rect" coords="816,131,993,174" alt="commons-cli" href="http://commons.apache.org/cli/" />
|
||||
<area shape="rect" coords="98,261,232,304" alt="maven-shared-utils" href="https://maven.apache.org/shared/maven-shared-utils/" />
|
||||
<area shape="rect" coords="0,265,80,305" alt="jansi" href="http://fusesource.github.io/jansi/" />
|
||||
<area shape="rect" coords="818,197,1027,238" alt="wagon-provider-api" href="https://maven.apache.org/wagon/wagon-provider-api/" />
|
||||
<area shape="rect" coords="824,446,981,488" alt="plexus-sec-dispatcher" href="https://github.com/codehaus-plexus/plexus-sec-dispatcher" />
|
||||
<area shape="rect" coords="1010,446,1098,487" alt="plexus-cipher" href="https://github.com/codehaus-plexus/plexus-cipher" />
|
||||
<area shape="rect" coords="828,520,973,563" alt="plexus-interpolation" href="https://codehaus-plexus.github.io/plexus-interpolation" />
|
||||
<area shape="rect" coords="823,389,1080,430" alt="plexus-component-annotations" href="https://codehaus-plexus.github.io/plexus-containers" />
|
||||
<area shape="rect" coords="1095,389,1229,434" alt="plexus-classworlds" href="https://codehaus-plexus.github.io/plexus-classworlds" />
|
||||
<area shape="rect" coords="1117,520,1221,561" alt="plexus-utils" href="https://codehaus-plexus.github.io/plexus-utils" />
|
||||
<area shape="rect" coords="816,376,1238,602" alt="plexus" href="https://codehaus-plexus.github.io/" />
|
||||
<area shape="rect" coords="815,248,1069,347" alt="sisu" href="http://www.eclipse.org/projects/project_summary.php?projectid=technology.sisu" />
|
||||
<area shape="rect" coords="1130,261,1215,305" alt="guice" href="http://code.google.com/p/google-guice/" />
|
||||
<area shape="rect" coords="1103,323,1241,364" alt="javax.inject" href="http://docs.oracle.com/javaee/6/api/javax/inject/package-summary.html" />
|
||||
</map>
|
||||
</p>
|
||||
</section>
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue