Maven 和 eclipse:将非 Maven 或外部 jar 添加到项目中的可靠方法?

2022-09-01 10:19:55

Maven很棒。它主要通过在配置中指定依赖包的版本来使我远离jar依赖地狱,并自动应用它们。它还通过m2e与Eclipse进行了很好的集成,因此可以在IDE中无缝地工作。pom

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

但是,问题是在导入项目时自动包含它们。长期以来,我一直在忍受半生不熟的修复和黑客来解决这个问题。每次有人安装这个项目时,我都必须告诉他们手动将jars添加到他们的Eclipse构建路径中,以便所有错误都消失。如下所示:lib/

enter image description here

我正在寻找一种方法来自动化这个过程,以一种既适用于命令行程序又可以使用Eclipse的方式:更强调Eclipse,因为当你导入它们时,拥有刚刚编译的项目是很好的。mvn

我不想为此设置存储库服务器,也没有任何内部专有组件可以保证在本地设置任何内容。我只是有一些jar文件,开发人员不使用Maven;我想和他们一起编译...我应该能够将它们包含在我的软件分发中,对吧?

我真的在寻找一种合理的方法来实现这一点,这种方法也可以在Eclipse中轻松使用。这是一个解决方案我发现有希望,但似乎肯定没有权威的解决方案来解决这个问题。唯一接近的另一件事是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中运行涉及将以下关于生命周期映射的混乱添加到您的,我从未开始工作过;我甚至不认为它被配置为实际向Eclipse构建路径添加任何内容。pom.xml

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

答案 1

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

    <dependency>
        <groupId>test</groupId>
        <artifactId>x</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/x.jar</systemPath>
    </dependency>

2)您可以将x.jar复制到本地maven存储库

存储库/测试/x/1.0/x-1.0.jar

并将依赖项添加为

    <dependency>
        <groupId>test</groupId>
        <artifactId>x</artifactId>
        <version>1.0</version>
    </dependency>

答案 2

您可以使用 maven 将文件从 project\lib 文件夹安装到本地存储库,方法是使用 maven-install-plugin,如下所示。我以前使用JDBC驱动程序这样做过。您可能需要为它创建一个单独的 pom,并使用 mvn -f installdeps.pom 或类似的东西来执行它。

如果你能让它玩得漂亮,并与像valify之类的生命周期绑定,那么你可以将m2e插件与Eclipse一起使用,它可能会很好地发挥作用,直接从pom读取依赖项.xml并根据需要将jars安装到本地存储库。

    <plugin>
        <!-- We dont want children attempting to install these jars to the repo. -->
        <inherited>false</inherited>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <executions>
            <execution>
                <id>Microsoft JDBC Driver File 1</id>
                <phase>install</phase>
                <goals>
                    <goal>install-file</goal>
                </goals>
                <configuration>
                    <file>lib/sqljdbc4.jar</file>
                    <groupId>com.microsoft</groupId>
                    <artifactId>microsoft-jdbc-driver</artifactId>
                    <version>4.0</version>
                    <packaging>jar</packaging>
                </configuration>
            </execution>
            <execution>
                <id>ojdbc5</id>
                <phase>install</phase>
                <goals>
                    <goal>install-file</goal>
                </goals>
                <configuration>
                    <file>lib/ojdbc5.jar</file>
                    <groupId>com.oracle</groupId>
                    <artifactId>ojdbc5</artifactId>
                    <version>11.1.2</version>
                    <packaging>jar</packaging>
                </configuration>
            </execution>
        </executions>
    </plugin>

推荐