#java #maven #classpath
#java #maven #classpath
Вопрос:
У меня есть Pom.xml которые содержат 3 зависимости
- Selenium — содержит jar (a)Selenium-java.jar (b)Selenium-api.jar
- Jsoup — содержит jar (a)jsoup1.7.jar
- POI — содержит jar (a) poi.1.7.jar (b) poi-ooxml-4.0.1.jar
Я хочу создать манифест с classpath, где я могу управлять префиксом classpath каждой зависимости.
Я пытался
<classpathPrefix>lib/</classpathPrefix> <addClasspath>true</addClasspath>
но это не решает проблему, поскольку добавляет один и тот же префикс в classpath для всех зависимостей.
Src
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<classpathPrefix>lib/</classpathPrefix>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
</dependencies>
Ожидается: ‘Selenium/Selenium-java.jar Selenium/Selenium-api.jar Jsoup/jsoup1.7.jar POI/poi.1.7.jar POI/poi-ooxml-4.0.1.jar ‘
Актуально: ‘lib/Selenium-java.jar lib/Selenium-api.jar lib/jsoup1.7.jar lib/poi.1.7.jar lib/poi-ooxml-4.0.1.jar ‘
Комментарии:
1. Я очень уверен, что вам это действительно не нужно. Какую проблему вы хотите решить?
2. Я хочу создать работоспособный jar моего проекта, и эти зависимости хранятся в соответствующей папке. Я хочу, чтобы этот исполняемый jar-файл использовал эти зависимости, используя classpath. Я не могу создать работоспособный jar (с зависимостями), поскольку у меня есть несколько проектов, которые используют одни и те же зависимости. Короче говоря, у меня все зависимости хранятся в соответствующей папке, и я хочу, чтобы каждый из моих jar, доступных для запуска проекта, мог использовать эту зависимость, используя classpath.
3. Я не понимаю, почему вы не можете просто объединить зависимости в свой jar? Нет проблем с объединением одной и той же зависимости в несколько jar.
4. Предположим, размер зависимостей равен 20 МБ. У меня есть 5 проектов jar. Если я объединю зависимости в каждом jar, то общий размер увеличится на 100 мб. Вместо этого, если бы я сохранил зависимости в некотором месте, и каждый jar ссылается на эти зависимости, это могло бы сэкономить мне 80 МБ памяти. Я просто хочу сделать общий размер jar как можно меньше.
5. ОК. Но все же вам нужно объяснить, почему вы не можете просто поместить все банки в один
lib
каталог.
Ответ №1:
Старый поток, я знаю, вы можете попробовать следующее: https://maven.apache.org/shared-archives/maven-archiver-2.5/examples/classpath.html#Custom