Как получить военный плагин Maven, копирующий полный файл jar в / lib моего веб-приложения? - PullRequest
1 голос
/ 27 июня 2011

У меня есть веб-приложение, настроенное с помощью pom.xml.Это веб-приложение использует другой модуль maven, который создает файл jar.Когда я проверяю полученный размер файла jar, это 8Ko.Когда я проверяю тот же самый jar-файл в моем веб-приложении / lib, это 5Ko.

Группа классов просто игнорируется, когда jar-файл достигает моего каталога / lib, вызывая исключение ClassNotFoundException при запуске веб-приложения.

Почему мой кувшин обрезан?

Веб-приложение 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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <artifactId>record</artifactId>
    <groupId>com.company.record</groupId>
    <version>1.0.0</version>
</parent>
<groupId>com.company.record</groupId>
<artifactId>record-webapp</artifactId>
<packaging>war</packaging>
<name>record-webapp</name>
<version>1.0.0</version>

<dependencies>
    <!-- JSF 2.0 -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.0.3-b02</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.0.3-b02</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>

    <!-- Primefaces -->
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>2.2</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.primefaces.themes</groupId>
        <artifactId>redmond</artifactId>
        <version>1.0.0</version>
    </dependency>

    <!-- Internal dependencies -->
    <dependency>
        <groupId>com.company.record</groupId>
        <artifactId>record-dao</artifactId>
        <version>1.0.0</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
</dependencies>

<build>
    <finalName>record</finalName>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jboss-maven-plugin</artifactId>
            <version>1.5.0</version>
            <configuration>
                <serverName>web</serverName>
            </configuration>
        </plugin>
    </plugins>
</build>

<repositories>
    <repository>
        <id>prime-repo</id>
        <name>Prime Technology Maven Repository</name>
        <url>http://repository.prime.com.tr</url>
        <layout>default</layout>
    </repository>
</repositories>

record-daopom.xml

<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
    <artifactId>record</artifactId>
    <groupId>com.company.record</groupId>
    <version>1.0.0</version>
</parent>

<groupId>com.company.record</groupId>
<artifactId>record-dao</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>record-dao</name>

<dependencies>
    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.6.4.Final</version>
        <exclusions>
            <exclusion>
                <artifactId>cglib</artifactId>
                <groupId>cglib</groupId>
            </exclusion>
            <exclusion>
                <artifactId>antlr</artifactId>
                <groupId>antlr</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jta</artifactId>
                <groupId>javax.transaction</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-collections</artifactId>
                <groupId>commons-collections</groupId>
            </exclusion>
            <exclusion>
                <artifactId>hibernate-commons-annotations</artifactId>
                <groupId>org.hibernate</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- Postgresql -->
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>8.3-606.jdbc4</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>

    <!-- Internal dependencies -->
    <dependency>
        <groupId>com.company.record</groupId>
        <artifactId>record-commun</artifactId>
        <version>1.0.0</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
</dependencies>

Ответы [ 4 ]

2 голосов
/ 27 июня 2011

Звучит так, как будто вы просматриваете разные версии файла jar.

Делаете ли вы mvn install зависимого файла jar перед сборкой проекта веб-приложения?

1 голос
/ 28 июня 2011

Запускали ли вы maven clean package или maven clean install до компиляции войны.Если вы сделали пакет только тогда, локальный jar не будет включен в войну, вместо этого будет использоваться jar в локальном репозитории (который может быть старым).

плагин war предполагает, что web-inf / libкаталоги jar, не помещайте туда jar-файлы в lib, управляйте ими через зависимости и соответственно изменяйте область действия.

1 голос
/ 27 июня 2011

Мне было интересно, связано ли это с тем, что ваша зависимая банка не была сделана мгновенно?

Просто чтобы доказать это, вы можете зайти в локальный репозиторий maven (не в целевой каталог) на вашей машине сборки, удалить текущий файл yourdepend-1.0.0.jar и снова запустить mvn install, я думаю, что это должно решить вашу проблему. проблема (если это проблема моментального снимка)

0 голосов
/ 28 июня 2011

Я наконец-то нашел решение. В каталоге web-app / web-inf / lib находился файл jar, который разделял то же имя с зависимым файлом jar.

По непонятной мне причине maven-war-plugin использовал этот старый jar-файл, а не новый, который я установил в своем локальном хранилище.

...