Как настроить maven: корневой путь сборки в банке

17

Вот pom.xml

<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>
    <groupId>org.springframework.webflow</groupId>
    <artifactId>spring-js-resources-thin</artifactId>
    <version>2.2.1.RELEASE</version>
    <name>Spring js lib</name>
    <description>Spring javascript library without dojo</description>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2.1</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

, и вот assembly.xml

<assembly>
    <id>js-jar</id>
    <formats>
        <format>jar</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>src/main/resources/</directory>  
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>META-INF/**/*</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

Проблема заключается в том, что каждый раз, когда я открываю сгенерированный файл jar (spring-js-resources-thin-2.2.1.RELEASE-js-jar.jar), корневая папка всегда называется artifactid-version (spring-js -resources-thin-2.2.1.RELEASE), затем META-INF.

Интересно, что в любом случае я могу создать файл jar с именем файла artifactid-version.jar , но БЕЗ artifactid-version в пути класса, точно так же, как каждая банка в репозитории maven. Я думаю, что должен быть вариант или способ назвать <outputDirectory> .

    
задан Dreamer 31.07.2012 в 22:54
источник

2 ответа

38

Вы должны указать maven-assembly-plugin, чтобы он не включал базовый каталог в архив, который может быть достигнут, используя следующее:

<assembly>
    <id>js-jar</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>src/main/resources/</directory>  
            <outputDirectory>.</outputDirectory>
            <includes>
                <include>META-INF/**/*</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

И предложение об использовании maven-jar-plugin очень хорошо, потому что немного похоже, что вы неправильно используете maven-assembly-plugin.

В последних версиях maven-assembly-plugin вы должны . в качестве корневой папки. Если вы используете / , вы получите предупреждение.

    
ответ дан khmarbaise 01.08.2012 в 08:44
источник
2

Добавьте элемент в сборку следующим образом.

<assembly>
    <id>js-jar</id>
    <formats>
        <format>jar</format>
    </formats>

    <baseDirectory>myBaseDir</baseDirectory>

    <fileSets>
        <fileSet>
            <directory>src/main/resources/</directory>  
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>META-INF/**/*</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

Если вы отключите <includeBaseDirectory> , ваш архив не будет иметь никакого корня. Так что это зависит от того, чего вы хотите. Я предпочитаю, чтобы мои zip-файлы, например, имели базовый каталог, чтобы он случайно не загрязнял каталог, если вы забыли создать каталог и компакт-диск в нем перед распаковкой. Гораздо удобнее.

    
ответ дан crowmagnumb 23.07.2015 в 20:15
источник