我想将我的项目打包在一个可执行的JAR中进行分发.
如何将所有依赖JAR的Maven项目打包到我的输出JAR中?
在Maven中,依赖项通常设置如下:
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<version>1.2.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
现在,如果您正在使用频繁发布的库,不断更新<version>标记可能有些烦人.有没有办法告诉Maven始终使用最新的可用版本(来自存储库)?
在实验/快速和肮脏的模拟开发阶段,Maven2让我发疯.
我有一个pom.xml文件定义了我想要使用的web-app框架的依赖项,我可以从该文件快速生成启动项目.但是,有时我想链接到尚未pom.xml定义文件的第三方库,所以不是pom.xml手动创建第三方库的文件并安装它,并将依赖项添加到我的pom.xml,我只是想告诉Maven:"除了我定义的依赖项,还要包含任何罐子/lib."
看起来这应该很简单,但如果是这样,我就会遗漏一些东西.
任何关于如何做到这一点的指针都非常感谢.除此之外,如果有一种简单的方法将maven指向一个/lib目录并轻松创建一个pom.xml所有封闭的jar映射到单个依赖项,然后我可以一次命名/安装和链接就足够了.
我知道你可以使用以下方法在某个类中运行所有测试:
mvn test -Dtest=classname
Run Code Online (Sandbox Code Playgroud)
但我想运行一个单独的方法,-Dtest = classname.methodname似乎不起作用.
当我maven install在我的多模块maven项目上运行时,我总是得到以下输出:
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
Run Code Online (Sandbox Code Playgroud)
所以,我google了一下,但我能找到的是我必须添加:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
Run Code Online (Sandbox Code Playgroud)
...到我的pom.xml.但它已经存在(在父母中pom.xml).
配置<encoding>maven-resources-plugin或maven-compiler-plugin也无法修复它.
所以有什么问题?
我有一个父项目多模块Maven项目P和三个子模块A,B和C.这两个B和C是战项目,都依赖于A.
我可以输入mvn compile在P和拥有所有的子模块正确的编译的.当我想为特定模块执行操作时,问题就来了.
我希望能够为项目打包一个war B,但是当我从B目录运行package命令时,它会抱怨它找不到依赖项A.
我从这个问题中理解:Maven和依赖模块可能Maven并不是真的设计用于这种类型的依赖解析,但这引出了如何打包的问题B?
mvn package我真的想要的时候是否必须运行整个项目层次结构B?
每次要打包时,是否必须将A的快照安装到本地存储库中B?
当A仍处于活跃开发阶段时,第二种情况并不是很有趣.
这里有什么最佳做法?
有没有办法强制maven(2.0.9)在一个jar文件中包含所有依赖项?
我将一个项目构建到一个jar文件中.我希望将依赖项中的类复制到jar中.
更新:我知道我不能在jar文件中包含一个jar文件.我正在寻找一种方法来解压缩指定为依赖项的jar,并将类文件打包到我的jar中.
我想将oracle jdbc驱动程序添加到我的项目中作为依赖项(运行时作用域) - ojdbc14.在MVNrepository站点中,放入POM的依赖关系是:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当然这不起作用,因为它不在maven使用的中央存储库中.2个问题:
如何找到包含此工件的存储库(如果有)?
如何添加它以便Maven将使用它?
在多项目构建中似乎有几种方法来构建父pom,我想知道是否有人对每种方式的优点/缺点有任何想法.
拥有父pom的最简单方法是将它放在项目的根目录中,即
myproject/
myproject-core/
myproject-api/
myproject-app/
pom.xml
Run Code Online (Sandbox Code Playgroud)
其中pom.xml既是父项目又是-core -api和-app模块
下一个方法是将父项分离到它自己的子目录中,如中所示
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
Run Code Online (Sandbox Code Playgroud)
父pom仍然包含模块,但它们是相对的,例如../myproject-core
最后,有一个选项,模块定义和父项分开,如
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
pom.xml
Run Code Online (Sandbox Code Playgroud)
父pom包含任何"共享"配置(dependencyManagement,属性等),myproject/pom.xml包含模块列表.
目的是可扩展到大规模构建,因此应该可以扩展到大量项目和工件.
一些奖金问题:
编辑:每个子项目都有自己的pom.xml,我把它留了下来以保持简洁.
我目前正在将一些项目从Ant迁移到Maven.循规蹈矩,因为我,我想用行之有效的约定查找groupId和artifactId,但我找不到任何详细的约定(也有一些,但不包括我想了解一下点).
以此项目为例,首先是Java包: com.mycompany.teatimer
Tea计时器实际上是两个单词,但Java包命名约定禁止插入下划线或连字符,所以我将它们全部写在一起.
我选择了groupId相同的包ID,因为我认为这是一个好主意.是吗?
最后,我必须选择一个artifactId,我目前去了teatimer.但是当我查看其他Maven项目时,他们使用连字符来分割artifactIds中的单词,如下所示:tea-timer.但是当连接到groupId:时确实看起来很奇怪com.mycompany.teatimer.tea-timer.
你会怎么做?
另一个例子:
包裹名字: com.mycompany.awesomeinhouseframework
groupId:( com.mycompany.awesomeinhouseframework?)
artifactId:( awesome-inhouse-framework?)