Maven和Eclipse:向项目添加非Maven或外部jar的可靠方法?

问题描述 投票:31回答:3

Maven很棒。通过在pom配置中指定依赖包的版本,并自动应用它们,通常可以使我摆脱jar依赖。它还通过m2e与Eclipse进行了很好的集成,因此在IDE中可以无缝运行。

这对于Maven全局已知的依赖项都非常有用。但是,有时,某些库需要包含在Maven仓库中不可用的项目中。在这种情况下,我通常将它们添加到项目中的lib/目录中。只要它们在类路径中,事情就可以编译。

但是,问题是在导入项目时自动将它们包括在内。我已经忍受了半熟的修复和黑客攻击这个问题,时间太长了。每当有人安装此项目时,我都必须告诉他们将lib/中的jar手动添加到其Eclipse构建路径中,以便消除所有错误。类似于以下内容:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS93eUJoOC5wbmcifQ==” alt =“在此处输入图像描述”>“ >>

我正在寻找一种可以与mvn命令行程序和Eclipse一起使用的方式来自动执行此过程的方法:更多地强调Eclipse,因为在导入它们时可以直接编译的项目真是太好了。

我不想为此设置回购服务器,也没有任何内部专有组件可以保证在本地进行任何设置。我只有一些jar文件,开发人员不使用Maven。我想与他们一起编译...我应该能够将它们包括在我的软件发行版中,对吗?

我真的在寻找一种合理的方法来实现这一点,这种方法也可以在Eclipse中正常使用。 This is one solution我发现很有希望,但是对于这个问题似乎绝对没有权威的解决方案。唯一接近的是maven-addjars-plugin,它可以正常工作,但只能在命令行上使用。这个插件还不错,并且配置合理:

<plugin>
    <groupId>com.googlecode.addjars-maven-plugin</groupId>
    <artifactId>addjars-maven-plugin</artifactId>
    <version>1.0.5</version>
    <executions>
        <execution>
            <goals>
                <goal>add-jars</goal>
            </goals>
            <configuration>
                <resources>
                    <resource>
                        <directory>${project.basedir}/lib/java-aws-mturk</directory>
                    </resource>
                    <resource>
                        <directory>${project.basedir}/lib/not-in-maven</directory>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

但是,要使其在Eclipse中运行,涉及到将有关生命周期映射的以下内容添加到您的pom.xml中,我从未尝试过;我什至不认为它实际上配置为向Eclipse构建路径添加任何内容。

<pluginManagement>
    <plugins>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
        <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>
                                    com.googlecode.addjars-maven-plugin
                                </groupId>
                                <artifactId>
                                    addjars-maven-plugin
                                </artifactId>
                                <versionRange>
                                    [1.0.5,)
                                </versionRange>
                                <goals>
                                    <goal>add-jars</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <execute />
                            </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

Maven很棒。通过在pom配置中指定依赖包的版本,并自动应用它们,通常可以使我摆脱jar依赖。它还与...

java eclipse maven m2eclipse m2e
3个回答
66
投票

1)您可以使用系统范围依赖性


6
投票

您可以使用maven通过maven-install-plugin将文件从project \ lib文件夹安装到本地存储库,如下所示。我之前使用JDBC驱动程序完成过此操作。您可能必须为其创建一个单独的pom并使用mvn -f installdeps.pom或类似的命令执行它。


0
投票

在我看来,您可以使用Maven Resources Plugin为您执行此操作。只需将资源复制绑定到适当的生命周期阶段(编译之前的阶段)即可。您很可能需要调整maven-compiler-plugin,以便在编译时和运行时这些库位于类路径中。

© www.soinside.com 2019 - 2024. All rights reserved.