Maven很棒。它主要通过在pom
配置中指定依赖包的版本来使我脱离jar依赖地狱,并自动应用它们。它还通过m2e与Eclipse进行了很好的集成,因此可以在IDE中无缝地工作。
这对于Maven全局已知的依赖项非常有用。但是,有时候,有些库需要包含在Maven存储库中不可用的项目中。在这种情况下,我通常将它们添加到项目中的lib/
目录中。只要它们在类路径中就可以编译。
然而,问题是导入项目时会自动包含它们。我一直在容忍这个问题,包括半生不熟的修复和黑客攻击太久了。每当有人安装这个项目时,我都要告诉他们手动将lib/
中的jar添加到他们的Eclipse构建路径中,以便所有错误消失。如下所示:
我正在寻找一种方法来自动化这个过程,这种方式适用于mvn
命令行程序和Eclipse:更多的是强调Eclipse,因为拥有刚刚编译的项目很好导入它们。
我不想为此设置一个repo服务器,我也没有任何内部专有组件可以保证在本地设置任何东西。我只有一些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中运行会涉及到将{life}映射到你的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>
答案 0 :(得分:58)
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>
答案 1 :(得分:5)
您可以使用maven将文件从project \ lib文件夹安装到本地仓库,使用maven-install-plugin,如下所示。我以前用JDBC驱动程序做过这个。您可能必须为它创建一个单独的pom并使用mvn -f installdeps.pom或类似的东西执行它。
如果你可以让它玩得很好并且与诸如validate之类的生命周期绑定,那么你可以将m2e插件与Eclipse一起使用,它可能会很好地直接从pom.xml读取依赖关系并将jar安装为需要当地的回购。
<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>
答案 2 :(得分:0)
在我看来,您可以使用Maven Resources Plugin为您执行此操作。只需将资源复制绑定到适当的生命周期阶段(编译之前的阶段)。您很可能需要调整maven-compiler-plugin,以便在编译时和运行时这些库都在类路径上。