【问题标题】:How to Copy Bundle-classpath jars and their dependencies from maven repo to my local lib folder?如何将 Bundle-classpath jar 及其依赖项从 maven repo 复制到我的本地 lib 文件夹?
【发布时间】:2011-09-30 06:30:13
【问题描述】:

我们正在开发一个 Eclipse RCP 应用程序。我们决定使用 SVN 作为版本控制系统。我们可以在 eclipse 环境中导出一个 eclipse 产品。一切正常。

但是,

我们的一些插件依赖于在其 manifest.mf 中使用 bundle-classpath 的常规 java jar。到目前为止,我们将这些 jars 提交到 SVN 存储库中。我们“听说”将 jar 提交到 svn 是错误的,我们应该使用 ma​​ven-tycho 并将这些 jar 放入 maven 存储库中。

因此,我们将 jar 从 SVN 存储库移至 Maven 存储库。然后我们想设置一个新的开发环境,我们从 svn 中检查了项目,它们有编译错误,因为我们没有 jars!

我们使用 m2eclipse 并在我新创建的 pom.xml 文件中定义所有依赖项。 ma​​ven-dependency-plugin 的复制目标 并列出所有 jar,然后我们运行 mvn validate 将 jar 放入我们的 lib 文件夹。它有效,但在我看来有点难看。因为我的插件的 pom.xml 看起来像定义每个依赖两次:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <id>copy-bundle-classpath-libs</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>lib</outputDirectory>
                        <overWriteReleases>true</overWriteReleases>
                        <overWriteSnapshots>true</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                        <stripVersion>true</stripVersion>
                        <artifactItems>
                            <artifactItem>
                                <groupId>MyGroup</groupId>
                                <artifactId>MyJar</artifactId>
                                <version>SNAPSHOT</version>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>MyGroup</groupId>
        <artifactId>MyJar</artifactId>
        <version>SNAPSHOT</version>
        <type>pom</type>
        <scope>compile</scope>
    </dependency>
</dependencies>

有没有办法摆脱这种情况?

如果 MyJar.pom 有其他依赖项,我在本地库中也需要它们。有没有办法将这些传递依赖项复制到我的本地 lib 文件夹

我尝试了 copy-dependencies 目标,但它试图找到我的插件所依赖的其他插件的 jar。我只需要将常规 jar 复制到我的本地库中。我的其他插件已经与它们的所有源代码一起作为插件项目存在。我不需要他们的罐子。我可以过滤掉那些吗?我试过这个没有成功:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <configuration>
                <excludeGroupIds>MyGroup</excludeGroupIds>
                <outputDirectory>lib</outputDirectory>
                <overWriteReleases>true</overWriteReleases>
                <overWriteSnapshots>true</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
                <stripVersion>true</stripVersion>
            </configuration>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

谢谢

【问题讨论】:

    标签: maven eclipse-rcp tycho maven-dependency-plugin


    【解决方案1】:

    您需要决定是否要复制传递依赖项。

    maven-dependency-plugin [1] 允许复制传递依赖项(“copy-dependencies”目标,只需要在 pom 中将依赖项添加到依赖项部分)或仅复制某些没有传递依赖项的工件(“复制”目标,需要仅将工件添加到插件的配置部分)。 使用复制依赖时,您还可以在传递依赖链中包含/排除某些 artifactId,请参阅 [2]。

    --

    [1]http://maven.apache.org/plugins/maven-dependency-plugin/

    [2]http://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html

    【讨论】:

    • 我认为复制依赖的目标是我想要的。我绝对想要传递依赖。但我不想要插件依赖项,因为我将它们作为一个项目。
    • 我尝试了 excludeArtifactIds 或 excludeGroupIds 但仍然给出相同的错误:无法在项目 XYZPlugin 上执行目标:无法解析项目 MyGroup:XYZPlugin:eclipse-plugin:1.0.0-SNAPSHOT 的依赖项:无法解析以下工件:MyGroup:ABCPlugin:jar:1.0.0-SNAPSHOT,在myrepo/public 中已缓存在本地存储库中,直到 my-public 的更新间隔已过或强制更新后才会重新尝试解析.
    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2012-04-22
    • 2012-06-30
    • 1970-01-01
    • 2012-12-01
    • 2010-09-10
    • 2010-09-10
    相关资源
    最近更新 更多