В этом уроке мы покажем вам, как использовать Maven для управления проектом Java – создайте, добавьте зависимости и упакуйте проект Java в исполняемый файл jar. В конце мы создадим исполняемый файл jar для хэширования заданной строки с помощью алгоритма SHA256.
Используемые технологии:
- Мавен 3.5.3
- JDK 8
- Кодек Apache Commons 1.11
1. Создайте проект из шаблона Maven
В терминале (*unix или Mac) или командной строке (Windows) перейдите в папку, в которой вы хотите создать проект Java. Введите эту команду:
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId={maven-template} -DinteractiveMode=false
Это указывает Maven на создание Java-проекта из шаблона Maven. Например,
D:\>mvn archetype:generate -DgroupId=com.mkyong.hashing -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.992 s [INFO] Finished at: 2018-09-27T17:15:57+08:00 [INFO] ------------------------------------------------------------------------
Приведенная выше команда создаст проект Java из maven-archetype-quickstart
шаблона.
2. Макет каталога Maven
Будет создана следующая структура каталогов проекта. Короче говоря, исходный код помещается в папку /src/main/java/
, код модульного теста вводит /src/тест/java/
.
P.S Приведенный выше рисунок взят из идеи IntelliJ, просто игнорируйте те .идея папка.
3. Файл POM
Просмотрите сгенерированный pom.xml
. Он совершенно пустой, всего одна зависимость от JUnit.
4.0.0 com.mkyong.hashing java-project3 jar 1.0-SNAPSHOT java-project http://maven.apache.org junit junit 3.8.1 test
Этот файл POM похож на муравья build.xml
файл, в нем описана вся информация о проекте, все, начиная со структуры каталогов, плагинов проекта, зависимостей проекта, способов создания этого проекта и т. Д., Прочитайте это официальное руководство по POM .
4. Обновить ПОМ
4.1 Добавьте свойства компилятора, чтобы указать Maven использовать указанную версию JDK для компиляции исходного кода.
UTF-8 1.8 1.8
4.2 Обновите JUnit до 4.12
junit junit 4.12 test
4.3 Добавить commons-кодек
для хэширования SHA.
commons-codec commons-codec 1.11
4.4 Полная обновленная версия.
4.0.0 com.mkyong.hashing java-project jar 1.0-SNAPSHOT java-project http://maven.apache.org UTF-8 1.8 1.8 junit junit 4.12 test commons-codec commons-codec 1.11
5. Написать Код
5.1 Обновите App.java
чтобы принять входные данные и хэшировать их с помощью алгоритма SHA-256.
package com.mkyong.hashing; import org.apache.commons.codec.digest.DigestUtils; public class App { public static void main(String[] args) { if (args.length < 1) { System.err.println("Please provide an input!"); System.exit(0); } System.out.println(sha256hex(args[0])); } public static String sha256hex(String input) { return DigestUtils.sha256Hex(input); } }
5.2 Модульный тест.
package com.mkyong.hashing; import org.junit.Assert; import org.junit.Test; public class AppTest { private String INPUT = "123456"; @Test public void testLength() { Assert.assertEquals(64, App.sha256hex(INPUT).length()); } @Test public void testHex() { String expected = "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"; Assert.assertEquals(expected, App.sha256hex(INPUT)); } }
Сделано.
6. Сборка Maven
6.1 Позвольте построить его с помощью пакета mvn
D:\java-project>mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------< com.mkyong.hashing:java-project >------------------- [INFO] Building java-project 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] ...... ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.mkyong.hashing.AppTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.067 sec Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ java-project --- [INFO] Building jar: D:\java-project\target\java-project-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.956 s [INFO] Finished at: 2018-09-28T12:40:18+08:00 [INFO] ------------------------------------------------------------------------
Он компилирует, запускает модульный тест и упаковывает проект в файл jar
и помещает его в папку project/target
.
7. Запуск № 1
7.1 Запустите его. Ой… По умолчанию Maven не добавлял зависимости проекта commons-кодек
в файл jar.
D:\java-project>java -cp target/java-project-1.0-SNAPSHOT.jar com.mkyong.hashing.App 123456 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/digest/DigestUtils at com.mkyong.hashing.App.sha256hex(App.java:18) at com.mkyong.hashing.App.main(App.java:13) Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.digest.DigestUtils at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ... 2 more
7.2 Чтобы решить эту проблему, мы можем использовать этот плагин maven-shade
для создания uber/fat-jar – сгруппировать все в один файл jar.
org.apache.maven.plugins maven-shade-plugin 3.2.0 package shade
7.3 Упакуйте его еще раз!
D:\java-project>mvn clean package [INFO] Scanning for projects... [... [INFO] --- maven-shade-plugin:3.2.0:shade (default) @ java-project --- [INFO] Including commons-codec:commons-codec:jar:1.11 in the shaded jar. [INFO] Replacing original artifact with shaded artifact. [INFO] Replacing D:\java-project\target\java-project-1.0-SNAPSHOT.jar with D:\java-project\target\java-project-1.0-SNAPSHOT-shaded.jar ...
Будут сгенерированы две банки, проверьте размер файла:
D:\java-project>dir target Volume in drive D is Samsung970 Volume Serial Number is 10DF-E63D Directory of D:\java-project\target 28/09/2018 12:57 PM 335,643 java-project-1.0-SNAPSHOT.jar 28/09/2018 12:57 PM 3,053 original-java-project-1.0-SNAPSHOT.jar ...
8. Запуск № 2
8.1 Запустите его снова. Хорошо, результат ожидаемый.
D:\java-project>java -cp target/java-project-1.0-SNAPSHOT.jar com.mkyong.hashing.App 123456 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
8.2 Можем ли мы запустить его как Jar? Нет, основного класса не существует.
D:\java-project>java -jar target/java-project-1.0-SNAPSHOT.jar 123456 no main manifest attribute, in target/java-project-1.0-SNAPSHOT.jar
8.3 Чтобы решить эту проблему, добавьте основной класс в maven-shade-плагин
подобный этому.
org.apache.maven.plugins maven-shade-plugin 3.2.0 package shade com.mkyong.hashing.App
9. Запуск № 3
9.1 Упакуйте его еще раз!
D:\java-project>mvn clean package
9.2 Запустите его как Jar.
D:\java-project>java -jar target/java-project-1.0-SNAPSHOT.jar 123456 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
Сделано.
10. ПОМ
Окончательный файл POM.
4.0.0 com.mkyong.hashing java-project jar 1.0-SNAPSHOT java-project http://maven.apache.org UTF-8 1.8 1.8 junit junit 4.12 test commons-codec commons-codec 1.11 org.apache.maven.plugins maven-shade-plugin 3.2.0 package shade com.mkyong.hashing.App
Скачать Исходный Код
Рекомендации
- Maven – Как создать проект веб-приложения Java
- Проект Apache Maven
- Простой проект Maven
- Пример хэширования Java SHA
- Как создать файл Jar, пример тонкой банки
- Создайте файл fat Jar – пример одной банки
- Создайте файл fat Jar – пример плагина Maven Shade
Оригинал: “https://mkyong.com/maven/how-to-create-a-java-project-with-maven/”