tree e11ab6e175847c5155b2b13584bc7ec700186fbf
parent 83520cf9ce298d1ec9af66cf17e9c55ffddd26fb
author mo khan <mo.khan@gmail.com> 1584929447 -0600
committer GitHub <noreply@github.com> 1584929447 +1000
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJeeBqnCRBK7hj4Ov3rIwAAdHIIAK2xy2nbxgRcedRrEb8PO2UB
 rbbWX7pjSQtwhYOID5NT65eoD6TtE+5noaN9DYCacPc6zMXhxYrU+Gdmp3C3syVF
 V10GoDzNGVYGUiAPLO52iDZwSR4xhRUYbfshYe0HalpApj1H4wnuHGwB4UzXpWR5
 X924z1zPOyCl61E30svVGAiIEfxaDBN18bymQnpINNl5mQ3rQUq3apBW2PjGPfL8
 rF8loY8qwEpWuDXwf8zHJHSENUMChbzNLY5SjBRmGFhpRftMn2yBNwb2oHIvY2DD
 K0NcFjHbdfymGGEaRwIup/GiSbc+yHjFI9KdJBJ+7LtoljbQJtw4RG51UwZ49YE=
 =WWR8
 -----END PGP SIGNATURE-----
 

Change http to https. (#50)

Fixes:

```bash
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.apache.maven.indexer.examples.BasicUsageExampleTest
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.914 s <<< FAILURE! - in org.apache.maven.indexer.examples.BasicUsageExampleTest
[ERROR] testApp(org.apache.maven.indexer.examples.BasicUsageExampleTest)  Time elapsed: 0.886 s  <<< ERROR!
java.io.IOException: Transfer for nexus-maven-repository-index.properties failed; Error transferring file: Server returned HTTP response code: 501 for URL: http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties from http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties
        at org.apache.maven.indexer.examples.BasicUsageExampleTest.testApp(BasicUsageExampleTest.java:30)
Caused by: org.apache.maven.wagon.TransferFailedException: Error transferring file: Server returned HTTP response code: 501 for URL: http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties from http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties
        at org.apache.maven.indexer.examples.BasicUsageExampleTest.testApp(BasicUsageExampleTest.java:30)
Caused by: java.io.IOException: Server returned HTTP response code: 501 for URL: http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties
        at org.apache.maven.indexer.examples.BasicUsageExampleTest.testApp(BasicUsageExampleTest.java:30)
Caused by: java.io.IOException: Server returned HTTP response code: 501 for URL: http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties
        at org.apache.maven.indexer.examples.BasicUsageExampleTest.testApp(BasicUsageExampleTest.java:30)

[INFO]
[INFO] Results:
[INFO]
[ERROR] Errors:
[ERROR]   BasicUsageExampleTest.testApp:30 » IO Transfer for nexus-maven-repository-inde...
[INFO]
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Maven :: Indexer Examples 6.1.0-SNAPSHOT:
[INFO]
[INFO] Maven :: Indexer Examples .......................... SUCCESS [  1.946 s]
[INFO] Maven :: Indexer Examples [Basic] .................. FAILURE [  4.365 s]
[INFO] Maven :: Indexer Examples [Spring] ................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.473 s
[INFO] Finished at: 2020-03-21T14:32:36-06:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project indexer-examples-basic: There are test failures.
[ERROR]
[ERROR] Please refer to /home/mokha/development/maven-indexer/indexer-examples/indexer-examples-basic/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :indexer-examples-basic
```