Maven: установите путь к классу манифеста с разным префиксом в соответствии с каждой зависимостью

#java #maven #classpath

#java #maven #classpath

Вопрос:

У меня есть Pom.xml которые содержат 3 зависимости

  1. Selenium — содержит jar (a)Selenium-java.jar (b)Selenium-api.jar
  2. Jsoup — содержит jar (a)jsoup1.7.jar
  3. 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