Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven和eclipse:向项目添加非Maven或外部JAR的可靠方法?_Java_Eclipse_Maven_M2eclipse_M2e - Fatal编程技术网

Java Maven和eclipse:向项目添加非Maven或外部JAR的可靠方法?

Java Maven和eclipse:向项目添加非Maven或外部JAR的可靠方法?,java,eclipse,maven,m2eclipse,m2e,Java,Eclipse,Maven,M2eclipse,M2e,马文很棒。它主要通过在pom配置中指定依赖包的版本并自动应用它们来避免jar依赖地狱。它还通过m2e与Eclipse进行了很好的集成,以便在IDE中无缝地工作 这对于Maven全局已知的依赖项来说是非常好的。但是,有时,有些库需要包含在项目中,而Maven repos中不可用。在这种情况下,我通常将它们添加到项目中的lib/目录中。只要它们在类路径中,就可以编译 但是,问题是在导入项目时要自动包含它们。我容忍这个问题的时间太长了,我的补丁和黑客都不成熟。每次有人安装这个项目时,我都必须告诉他们手

马文很棒。它主要通过在
pom
配置中指定依赖包的版本并自动应用它们来避免jar依赖地狱。它还通过m2e与Eclipse进行了很好的集成,以便在IDE中无缝地工作

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

但是,问题是在导入项目时要自动包含它们。我容忍这个问题的时间太长了,我的补丁和黑客都不成熟。每次有人安装这个项目时,我都必须告诉他们手动将
lib/
中的jar添加到他们的Eclipse构建路径中,以便消除所有错误。如下所示:

我正在寻找一种方法来自动化这个过程,这种方法可以与
mvn
命令行程序和Eclipse一起使用:更多地强调Eclipse,因为在导入项目时,让项目能够编译是很好的

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

我真的在寻找一种合理的方法来实现这一点,这种方法在Eclipse中也能正常工作。我发现很有希望,但是 对于这个问题,似乎没有权威的解决方案。另一个接近的东西是,它可以正常工作,但只在命令行上。这个插件不错,配置非常合理:

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

在我看来,你可以用这个来为你做这件事。只需将资源复制绑定到适当的生命周期阶段(编译之前的阶段)。您很可能需要调整maven编译器插件,使这些库在编译时和运行时位于类路径上。

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

如果你能让它玩得很好,并绑定一个生命周期,比如validate之类的东西,那么你可以将m2e插件与Eclipse一起使用,它可能会玩得很好,直接从pom.xml读取依赖项,并根据需要将JAR安装到本地repo

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

假的
org.apache.maven.plugins
maven安装插件
Microsoft JDBC驱动程序文件1
安装
安装文件
lib/sqljdbc4.jar
com.microsoft
microsoft jdbc驱动程序
4
罐子
ojdbc5
安装
安装文件
lib/ojdbc5.jar
com.oracle
ojdbc5
11.1.2
罐子
1)您可以使用系统范围依赖关系

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

测试
x
1
系统
${basedir}/lib/x.jar
2) 您可以将x.jar复制到本地maven存储库,如下所示:

repository/test/x/1.0/x-1.0.jar

并将依赖项添加为

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

测试
x
1

我更喜欢依赖本地nexus安装。我希望能够将此软件提供给其他人使用,因此这似乎不合理。我只想分享几个JAR,所以不会那么复杂;如果你是自由和开放源码软件,那么开发他人的库并向上游发送补丁将有助于社区的发展。不管怎样,这是你的选择。我不需要用户使用它;我需要它来帮助其他在github上查看代码的人。我有一些插件和代码(一些来自封闭源代码),maven-ize是不可行的,并且期望能够对每个依赖项都这样做是不合理的。参考这篇文章,这正是我所需要的。它还使JAR可用于依赖于此JAR的项目。与Eclipse完美集成,避免了所有其他人所建议的管理repo和XML。也不涉及将垃圾复制到Maven存储库中+如果可以的话,投100票。@Andrew Mao如果这个解决方案对你有效,那就好了。当心这个事实,那就是。因此,它们应该存在于目标平台上,并且不会包含在打包的工件(例如war文件)中。我发现系统范围会影响下游瞬态依赖关系的处理,我们无法使用它。我认为正确的方法是在本地存储库中安装(手动或脚本化)所需的工件。如果我使用系统范围,
groupId
artifactId
是否相关?(即,我可以在这些字段中输入任何内容吗?)由于这些JAR不在Maven repos中,我假设它们不重要?它们可以是任何东西,但Empy为什么孩子们不能安装非Maven JAR?请解释一下。
    <dependency>
        <groupId>test</groupId>
        <artifactId>x</artifactId>
        <version>1.0</version>
    </dependency>