我很难理解Maven 中的maven-resources-plugin和project.build.resources标签之间的区别。
两者似乎都有相同的目的。[resources、testResources 和 copy-resources]的不同目标maven-resources-plugin也可以使用 resources 标签来实现:
<resources>
<resource>
<directory>src/dir</directory>
<targetPath>dest/dir</targetPath>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/dir</directory>
</testResource>
Run Code Online (Sandbox Code Playgroud)
并且使用<resources>标签可以有效地将源目录中的指定文件复制到目标目录,copy-resources类似于maven-resources-plugin.
那么,它们之间有什么区别吗?
它们在任何特定场景下的功能会有所不同吗?
我想将我的连续整合工作(Hudson)分成两个步骤.(因为一起构建和报告的运行时间太长.)在第一个工作中,我成功地使用"mvn package" 构建了我的多模块maven项目.然后我将我的工作区复制到另一个位置并尝试仅使用目标"site"和/或findbugs/checkstyle/pmd再次构建项目以创建报告.但这不起作用!Maven 无法解析子模块的依赖关系.(但是所有JAR都可以在其目标文件夹中使用.)
示例:我的结构如下所示:
项目C具有依赖项目B.
当我使用"mvn site"构建所有内容时,它会为项目A和B生成所有报告.但在项目C停止,并显示错误消息"无法解析项目B的依赖项".但是项目B已经用"mvn package"构建.即我可以在其目标文件夹中找到项目B的JAR文件.
有没有办法在没有"mvn install"的情况下解决子模块B的依赖关系?(我不想在我的ci服务器上执行此操作.我担心对于具有相同代码库的其他作业可能会有危险.)
更新08/20/12:
根文件夹的POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>Foo</name>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>parent</module>
</modules>
</project>
Run Code Online (Sandbox Code Playgroud)
父POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>Foo</name>
<groupId>foo</groupId>
<artifactId>parent</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>../bar-a</module>
<module>../bar-b</module>
<module>../bar-c</module>
<module>../bar-d</module>
</modules>
[...]
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.5.1</version>
[...]
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.7.1</version>
[...]
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.9.1</version>
[...]
</plugin>
</plugins>
</reporting>
</project> …Run Code Online (Sandbox Code Playgroud) 我一直在关注maven-ear-plugin网站上的示例,该网站展示了如何将第三方库添加到生成的application.xml中.但是,它似乎没有像我预期的那样工作.类似地,Web模块contextRoot被忽略.
根据文档,我想要做的应该是完全可能的.
可以使用contextRoot参数自定义Web模块的上下文根.
请注意,生成的application.xml中不包含第三方库(即JarModule)(只有ejb-client应包含在java条目中).但是,通过指定includeInApplicationXml标志,可以在生成的application.xml中包含jar依赖项.
在我的application.xml中执行构建时,我有以下输出.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
"http://java.sun.com/dtd/application_1_3.dtd">
<application>
<display-name>MyApp.EAR</display-name>
<module>
<ejb>MyApp.jar</ejb>
</module>
<module>
<web>
<web-uri>MyApp.war</web-uri>
<context-root>/MyApp.Web</context-root>
</web>
</module>
</application>
Run Code Online (Sandbox Code Playgroud)
从以下maven configuraton(pom.xml).
...
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah</groupId>
<artifactId>MyApp.EAR</artifactId>
<version>1.0</version>
<packaging>ear</packaging>
<build>
<plugins>
<plugin>
<groupId>maven-ear-plugin</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.7</version>
<configuration>
<applicationName>MyApp</applicationName>
<modules>
<ejbModule>
<groupId>com.blah</groupId>
<artifactId>MyApp.EJB</artifactId>
</ejbModule>
<webModule>
<groupId>com.blah</groupId>
<artifactId>MyApp.Web</artifactId>
<contextRoot>MyApp</contextRoot>
</webModule>
<jarModule>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<includeLibInApplicationXml>true</includeLibInApplicationXml>
</jarModule>
</modules>
<archive>
<manifestEntries>
<WebLogic-Application-Version>${weblogic.version}</WebLogic-Application-Version>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies> …Run Code Online (Sandbox Code Playgroud) 我的代码实际上包含一个资源类和一个BEan类,它的返回类型是JSON.
@Path("/json")
public class JSONRetrive {
@GET
@Produces(MediaType.APPLICATION_JSON)
public JSONT getJson(){
JSONT jsont = new JSONT();
jsont.setJsont("inr");
return jsont;
}
}
Run Code Online (Sandbox Code Playgroud)
/*是否有任何Annotation代表JSON.我是否需要使用任何其他注释.*/
//@XmlRootElement
public class JSONT {
private String jsont;
public String getJsont() {
return jsont;
}
public void setJsont(String jsont) {
this.jsont = jsont;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我取消注释@XmlRootElement它是否正常工作是否有任何其他替代解决方案
我有一个Android Maven项目,并希望在其中使用Google Guice 3.0.
有一个Guice的"No-AOP"版本,它与Android兼容.
更新1(03.05.2013 10:46 MSK):
当我在Google Guice上添加依赖项时,我在build(mvn clean install)期间遇到以下异常:
[INFO] UNEXPECTED TOP-LEVEL EXCEPTION:
[INFO] java.lang.IllegalArgumentException: already added: Lcom/google/inject/Abs
tractModule;
[INFO] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:12
3)
[INFO] at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
[INFO] at com.android.dx.command.dexer.Main.processClass(Main.java:490)
[INFO] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
[INFO] at com.android.dx.command.dexer.Main.access$400(Main.java:67)
[INFO] at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398)
[INFO] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpen
er.java:245)
[INFO] at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.j
ava:131)
[INFO] at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java
:109)
[INFO] at com.android.dx.command.dexer.Main.processOne(Main.java:422)
[INFO] at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333)
[INFO] at com.android.dx.command.dexer.Main.run(Main.java:209)
[INFO] at com.android.dx.command.dexer.Main.main(Main.java:174)
[INFO] at com.android.dx.command.Main.main(Main.java:91)
[INFO] 1 error; …Run Code Online (Sandbox Code Playgroud) 在我们的新保险项目中,我正在尝试使用Ldap 活动目录实现spring-security.
一旦用户在AD中找到,我想在AD上检查用户名/密码.我想从用户表(app授权用户)授权他在数据库中具有访问级别.有人可以提供样品/指出我的资源.
我需要自定义一些不在资源下的 XML 文件(特别是,它们在 EAR 的项目 src/main/application 下)。
过滤机制将是完美的,但我的理解(正确?)是它只适用于资源。
有没有办法对 src/main/resources 以外的其他目录中的文件使用过滤?
提前致谢。
我和Maven有问题.我试图创建原型,但我现在不知道如何将源文件放到目录中${groupId}/${artifactId}.如果我尝试从此原型创建项目,则文件将隐式存储在${groupId}目录中.看来Maven认为,组ID是包名.但我使用的${groupId}/${artifactId}是包名,所以我需要将源文件存储在${groupId}/${artifactId}目录中.我见过解决方案:将文件放入__artifactId__目录.双下划线应确定一个变量.但是它没有任何效果.变量似乎是空的,但是在源文件中的包名称中成功使用.
有enybody想法,在文件名中使用双下划线时应该使用哪种技巧?
我想使用New Maven Project向导使用原型在Eclipse中创建一个新的Maven项目.在"选择原型"步骤中,我有三个目录可供选择:Nexus Indexer,Internal和Default Local.我不明白这些目录的内容应该来自哪里.如果我点击"配置"按钮,它们都是灰色的,我无法修改它们.
只有Internal目录中列出了任何原型.这些原型来自哪里?它不是来自我的本地Maven存储库,因为组/工件不在其中(并且未列出repo中的原型).
为什么Nexus Indexer列表是空的?我已经阅读了一些Nexus索引需要更新的帖子,但不知道如何更新.这与存储库索引(计划每天更新)不同.
正如您所看到的,我对整个目录业务以及Maven,m2eclipse和Nexus的交互方式有点困惑.任何澄清都是最受欢迎的!
我的设置:
我的本地Maven settings.xml如下所示:
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://myserver:8080/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository> …Run Code Online (Sandbox Code Playgroud) 我对多模块项目中的属性有疑问.
考虑以下3级项目结构:
project
+- pom.xml (packaging: pom) //referred to as super-pom
+- module_group
+- pom.xml (packaging: pom) //referred to as group-pom
+- module
+-pom.xml (packaging: jar) //referred to as module-pom
Run Code Online (Sandbox Code Playgroud)
在super-pom中,我定义了一个属性修订版,它获取了默认值"unknown".
另外,我声明并使用buildnumber-maven-plugin配置为获取svn修订版并将其放入属性修订版中.
接下来我配置将该maven-jar-plugin属性写入清单.
在模块-pom我声明使用buildnumber-maven-plugin实际执行的.
这一切都在直接构建模块时起作用,即仅执行模块pom.清单包含由buildnumber-maven-plugin控制台中打印的as 报告的修订.
但是,如果我执行super-pom或group-pom,则将版本的默认值写入清单,尽管buildnumber-maven-plugin执行获取并检索正确的版本(它 在运行之前将其打印到控制台maven-jar-plugin).
所以我觉得我在多模块项目中缺少关于属性继承的东西.
有没有人知道这里有什么问题?或者任何人都可以指出我在这些情况下如何实际处理属性的描述(遗憾的是我还没有设法找到一个好的描述)?
更新
我做了一些研究和一些测试运行与调试输出(-X选项),从我到目前为止发现,我认为我的问题如下:
1)在pom解析期间,pom中使用的属性将替换为它们的值.
考虑这个部分pom:
<!-- declare the property default value -->
<properties>
<revision>default</revision>
</properties>
...
<!-- use the …Run Code Online (Sandbox Code Playgroud)