我有一个专有的jar,我想作为依赖添加到我的pom.
但我不想将它添加到存储库.原因是我希望我的常用maven命令等mvn compile开箱即用.(没有要求开发人员将其自己添加到某个存储库中).
我希望jar在源代码控制中位于第3方库中,并通过pom.xml文件的相对路径链接到它.
可以这样做吗?怎么样?
我正在使用maven-assembly插件来创建我的应用程序的jar,包括其依赖项如下:
<assembly>
<id>macosx</id>
<formats>
<format>tar.gz</format>
<format>dir</format>
</formats>
<dependencySets>
<dependencySet>
<includes>
<include>*:jar</include>
</includes>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
Run Code Online (Sandbox Code Playgroud)
(我省略了一些与问题无关的其他内容)
到目前为止,这工作得很好,因为它创建了一个lib包含所有依赖项的目录.但是,我最近添加了一个新的依赖项,其范围是system,并且它不会将其复制到lib输出目录.我必须遗漏一些基本的东西,所以我打电话求助.
我刚刚添加的依赖项是:
<dependency>
<groupId>sourceforge.jchart2d</groupId>
<artifactId>jchart2d</artifactId>
<version>3.1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/external/jchart2d-3.1.0.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我能够包含此依赖项的唯一方法是将以下内容添加到assembly元素:
<files>
<file>
<source>external/jchart2d-3.1.0.jar</source>
<outputDirectory>lib</outputDirectory>
</file>
</files>
Run Code Online (Sandbox Code Playgroud)
但是,这会强制我在重命名此jar时更改pom和程序集文件(如果有的话).而且,这似乎是错的.
我有试过<scope>runtime</scope>在dependencySets和<include>sourceforge.jchart2d:jchart2d</include>没有运气.
那么如何system在maven 2中将scoped jar 包含到汇编文件中?
非常感谢
我已经在Stack Overflow上找到了如何在项目中包含第三方JAR而不将其安装到"本地存储库"的答案:
我可以在没有安装的情况下将jar添加到maven 2 build classpath吗?
但是,当我使用Maven Shade插件创建包含项目所有依赖项的JAR时,第三方JAR不会自动包含在内.
如何让Maven Shade插件将这样的第三方JAR添加到着色的JAR中?
根据得到的答案,我做到了.我做的是,将这个片段添加到我的pom.xml的开头:
<repositories>
<repository>
<id>repo</id>
<url>file://${basedir}/repo</url>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)
然后为我的项目添加了一个依赖项,也添加到pom.xml:
<dependencies>
<dependency>
<groupId>dummy</groupId>
<artifactId>dummy</artifactId>
<version>0.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
然后运行命令行将包添加到'repo':
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file
-Dfile=<my-jar>.jar -DgroupId=dummy -DartifactId=dummy
-Dversion=0.0.0 -Dpackaging=jar -DlocalRepositoryPath=`pwd`/repo/
Run Code Online (Sandbox Code Playgroud)
(不确定repo路径是否需要完整路径,但不想冒险.)
repo子目录的内容现在是:
repo/dummy/dummy/0.0.0/dummy-0.0.0.jar
repo/dummy/dummy/0.0.0/dummy-0.0.0.pom
repo/dummy/dummy/maven-metadata-local.xml
Run Code Online (Sandbox Code Playgroud)
现在我可以将其检入版本控制,并且没有本地或远程依赖项.
我有一个闭源项目,我想用Maven构建.它依赖于两个java库,这些库在我能够找到的任何公共存储库中都不可用(在本例中为libGoogleAnalytics.jar和FlurryAgent.jar,但该问题适用于任何闭源依赖项).
我希望组织中的任何人能够使用我用来构建应用程序的完全相同版本的依赖项来构建应用程序.这包括我的同事和我们的构建服务器.
如何管理maven不知道如何解决的闭源依赖?
显然,我可以去每个人的机器并手动执行"mvn install:install-file"以将二进制文件放入他们的maven存储库,但是手动管理依赖关系会破坏依赖关系管理器的目的.
根据maven的内部存储库文档,我可以在某处设置存储库服务器并将二进制文件放在那里,然后所有开发人员都可以访问它们.但这意味着我需要维护一台新服务器(或至少在现有服务器上建立一个新网站).这也意味着我必须担心权限,以确保外部各方无法访问存储库.这也意味着我现在必须担心备份和可用性,这样如果存储库不可用,开发人员就不会遇到打嗝.
如果我可以以某种方式使用我们现有的scm(在这种情况下为hg,但可能是git或svn或其他)来存储依赖项,那么所有这些问题都会消失.我们的源代码控制存储库已经备份,它基本上始终可供开发人员使用构建版本,并且已经处理了它的权限.
但是我还没有弄清楚如何使用hg来管理maven依赖关系,如果这是可能的话.
我有一些我自己提供的依赖项.这些罐子位于资源目录中.在我的pom中,它们的范围是系统,我包括它们的路径.但是,当我使用程序集插件并使用时
<addClasspath>true</addClasspath>
Run Code Online (Sandbox Code Playgroud)
它不会添加系统jar的路径.如何让它们自动包含在内?
谢谢
我正在尝试使用maven和eclipse构建我的应用程序.我依赖于我本地机器上的第三方罐子.这是我的pom.xml
<dependency>
<groupId>sourceforge.net</groupId>
<artifactId>zipdiff</artifactId>
<version>0.4</version>
<scope>system</scope>
<systemPath>C:/gelcap/lib/zipdiff-0.4.jar</systemPath>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我运行mvn:install时会为我的项目创建war文件.但问题是它不包括zipdiff.jar文件到web-inf/lib文件夹,它只包含下载的文件.我需要包括从我的本地系统复制文件,但maven忽略它们.我没有想到为什么maven没有包含系统范围的文件到我的war文件.请告诉我如何解决这个问题.提前致谢