0

我很难使用 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>

我希望任何人都可以帮助我。

干杯丹

4

3 回答 3

2

我决定不将依赖罐添加到我的输出罐中。相反,我使用以下 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>

谢谢您的帮助。

干杯丹

于 2013-04-05T14:32:49.843 回答
1

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

您可以使用以下部分巧妙地包含源代码resource

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

我冒昧地猜测您可能能够将您的copy-dependencies任务绑定到resources阶段,看看是否会在最终工件中包含依赖项 JAR。

于 2013-04-05T08:48:46.213 回答
0

也许你应该看到这个链接。只需检查您是否正确配置了您的 maven+IDE 合作

于 2013-04-05T09:50:39.837 回答