Maven-使用自定义类路径构建manifest.mf

Maven-使用自定义类路径构建manifest.mf,maven,classpath,manifest.mf,Maven,Classpath,Manifest.mf,我正在使用Maven构建一个EAR项目,其中包含20多个工件和约30个第三方工件。 耳朵的结构是这样的 EAR +-project-artifact-1 +-project-artifact-2 ... +-project-artifact-n +-lib/ | +-3rd-party-lib-1 | +-3rd-party-lib-2 | ... | \-3rd-party-lib-n \-META-INF/ 包装很好。 我的问题是MANIFEST.MF的类路径的定制 我想使用Mavens特

我正在使用Maven构建一个EAR项目,其中包含20多个工件和约30个第三方工件。 耳朵的结构是这样的

EAR
+-project-artifact-1
+-project-artifact-2
...
+-project-artifact-n
+-lib/
| +-3rd-party-lib-1
| +-3rd-party-lib-2
| ...
| \-3rd-party-lib-n
\-META-INF/
包装很好。 我的问题是MANIFEST.MF的类路径的定制 我想使用Mavens特性通过使用

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

这是我的(缩短的)耳朵pom:

<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>

<parent>
    <groupId>com.my.app</groupId>
    <artifactId>build-parent</artifactId>
    <version>0.1</version>
    <relativePath>../myapp_build</relativePath>
</parent>

<groupId>com.my.app</groupId>
<artifactId>myapp_application_EAR</artifactId>
<version>${myapp.version}</version>
<description />
<packaging>ear</packaging>

<dependencies>
    <!-- myapp dependencies -->
    <dependency>
        <groupId>com.my.app</groupId>
        <artifactId>myapp_web</artifactId>
        <type>war</type>
    </dependency>

    <dependency>
        <groupId>com.my.app</groupId>
        <artifactId>myapp_ejb</artifactId>
        <type>ejb</type>
    </dependency>

    <dependency>
        <groupId>com.my.app</groupId>
        <artifactId>artifact1</artifactId>
    </dependency>

    <dependency>
        <groupId>com.my.app</groupId>
        <artifactId>artifact2</artifactId>
    </dependency>

    <!-- 3rd party dependencies -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
                <generateApplicationXml>true</generateApplicationXml>
                <!-- skinny WAR configuration see WAR project POM -->
                <skinnyWars>true</skinnyWars>
                <modules>
                    <webModule>
                        <groupId>com.my.app</groupId>
                        <artifactId>myapp_web</artifactId>
                        <contextRoot>myapp_web</contextRoot>
                    </webModule>

                    <ejbModule>
                        <groupId>com.my.app</groupId>
                        <artifactId>myapp_ejb</artifactId>
                    </ejbModule>

                    <!-- 3rd party libs go to lib/ -->
                    <jarModule>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                        <bundleDir>lib/</bundleDir>
                        <includeInApplicationXml>false</includeInApplicationXml>
                    </jarModule>

                    <jarModule>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-jdk14</artifactId>
                        <bundleDir>lib/</bundleDir>
                        <includeInApplicationXml>false</includeInApplicationXml>
                    </jarModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>

4.0.0
com.my.app
构建父级
0.1
../myapp\u构建
com.my.app
我的应用程序
${myapp.version}
耳朵
com.my.app
myapp_网站
战争
com.my.app
myapp_ejb
ejb
com.my.app
人工制品1
com.my.app
人工制品2
org.slf4j
slf4j api
org.slf4j
slf4j-jdk14
maven耳朵插件
符合事实的
符合事实的
com.my.app
myapp_网站
myapp_网站
com.my.app
myapp_ejb
org.slf4j
slf4j api
解放党/
错误的
org.slf4j
slf4j-jdk14
解放党/
错误的

您能显示构建ear文件的pom文件吗?我添加了一些pom供参考。实际的POM更大,依赖性更强。首先:为什么更改默认的src位置?日食?在Eclipse中使用M2e插件。为什么要将存储库条目添加到本地存储库?这就是Maven的默认值?我没有看到一个包含所有模块的多模块构建,这些模块都包含在EAR中…请参见示例。src:我没有使用默认的src位置,因为我正在处理已经具有此结构的项目-稍后决定使用maven作为构建工具。现在改变这种结构太费劲了。repo:它是一个占位符模块:这些模块列在另一个pom中,它只包含模块条目并继承父pom-我认为这不会给手头的问题增加太多内容,所以我留下了它。我的问题不在于构建本身,而在于在MF中为我想要的结构生成正确的(!)CP,而无需无休止的配置开销
<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>

<parent>
    <groupId>com.my.app</groupId>
    <artifactId>build-parent</artifactId>
    <version>0.1</version>
    <relativePath>../myapp_build</relativePath>
</parent>

<groupId>com.my.app</groupId>
<artifactId>myapp_application_EAR</artifactId>
<version>${myapp.version}</version>
<description />
<packaging>ear</packaging>

<dependencies>
    <!-- myapp dependencies -->
    <dependency>
        <groupId>com.my.app</groupId>
        <artifactId>myapp_web</artifactId>
        <type>war</type>
    </dependency>

    <dependency>
        <groupId>com.my.app</groupId>
        <artifactId>myapp_ejb</artifactId>
        <type>ejb</type>
    </dependency>

    <dependency>
        <groupId>com.my.app</groupId>
        <artifactId>artifact1</artifactId>
    </dependency>

    <dependency>
        <groupId>com.my.app</groupId>
        <artifactId>artifact2</artifactId>
    </dependency>

    <!-- 3rd party dependencies -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
                <generateApplicationXml>true</generateApplicationXml>
                <!-- skinny WAR configuration see WAR project POM -->
                <skinnyWars>true</skinnyWars>
                <modules>
                    <webModule>
                        <groupId>com.my.app</groupId>
                        <artifactId>myapp_web</artifactId>
                        <contextRoot>myapp_web</contextRoot>
                    </webModule>

                    <ejbModule>
                        <groupId>com.my.app</groupId>
                        <artifactId>myapp_ejb</artifactId>
                    </ejbModule>

                    <!-- 3rd party libs go to lib/ -->
                    <jarModule>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                        <bundleDir>lib/</bundleDir>
                        <includeInApplicationXml>false</includeInApplicationXml>
                    </jarModule>

                    <jarModule>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-jdk14</artifactId>
                        <bundleDir>lib/</bundleDir>
                        <includeInApplicationXml>false</includeInApplicationXml>
                    </jarModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>