包含源和附加依赖项的Maven包

时间:2013-04-05 08:18:03

标签: java maven

我很难使用maven将java源文件和附加的依赖项添加到输出jar文件中。

我想要存档的是将编译后的类,源文件和所有依赖项(没有源代码)放在一个可以分发的jar中。

- com/name/project/*.class
- com/name/project/*.java
- lib/*.jar
- META-INF/MANIFEST.MF  

这是我目前所拥有的pom.xml:

 <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.7</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.name.project/main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

我希望有人能帮助我。

欢呼声 担

3 个答案:

答案 0 :(得分:2)

我决定不将dependecy-jar添加到我的输出jar中。相反,我使用以下pom.xml将我的源包含在jar中,同时包含已编译的依赖项。 我不得不排除* / .java文件,因为一些奇怪的依赖项也包含了源代码。

<build>
    <sourceDirectory>src/</sourceDirectory>
    <resources>
        <resource>
            <directory>${project.build.sourceDirectory}</directory>
        </resource>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.7</version>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/classes</outputDirectory>
                        <excludes>**\/*.java</excludes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

感谢您的帮助。

欢呼声 担

答案 1 :(得分:1)

JAR通常不应该包含其他JAR,但当然没有什么可以阻止你这样做。

您可以使用resource部分整齐地包含源代码,如下所示:

<build>
    </resources>
        <resource>
            <directory>src/main/java</directory>
        </resource>
    </resources>
    ...

我猜想你可以将copy-dependencies任务绑定到resources阶段,看看是否会在最终工件中包含依赖JAR。

答案 2 :(得分:0)

也许你应该看到this link。只需检查您是否正确配置了maven + IDE合作