我有兴趣创建一个Maven原型,我认为我已经掌握了大部分基础知识.但是,我坚持的一件事是,有时我想使用自定义逻辑来填充模板.例如,如果有人生成我的原型并将artifactId指定为hello-world,我想生成一个名为HelloWorld的类,它只打印出"Hello World!".到控制台.如果另一个人使用artifactId = howdy-there生成它,那么genned类将是HowdyThere,它将打印出"Howdy There!".
我知道,Maven的原型机制在幕后使用Velocity模板引擎,所以我读了这篇关于创建自定义指令的文章.这似乎是我想要的,所以我创建了一个名为HyphenatedToCamelCaseDirective的类,它扩展了org.apache.velocity.runtime.directive.Directive.在该类中,我的getName()实现返回"hyphenatedCamelCase".在我的archetype-metadata.xml文件中,我有以下内容......
<requiredProperties>
<requiredProperty key="userdirective">
<defaultValue>com.jlarge.HyphenatedToCamelCaseDirective</defaultValue>
</requiredProperty>
</requiredProperties>
Run Code Online (Sandbox Code Playgroud)
我的模板类看起来像这样......
package ${package};
public class #hyphenatedToCamelCase('$artifactId') {
// userdirective = $userdirective
public static void main(String[] args) {
System.out.println("#hyphenatedToCamelCase('$artifactId')"));
}
}
Run Code Online (Sandbox Code Playgroud)
在我安装我的原型后然后做一个原型:通过指定artifactId = howdy-there和groupId = f1.f2生成,结果类看起来像这样......
package f1.f2;
public class #hyphenatedToCamelCase('howdy-there') {
// userdirective = com.jlarge.HyphenatedToCamelCaseDirective
public static void main(String[] args) {
System.out.println("#hyphenatedToCamelCase('howdy-there')"));
}
}
Run Code Online (Sandbox Code Playgroud)
结果表明,尽管userdirective按照我的预期方式设置,但它并没有像我希望的那样评估#hyphenatedToCamelCase指令.在指令类中,我有一个render方法将消息记录到System.out,但是该消息没有显示在控制台中,因此这让我相信该方法永远不会在archetype:generate期间执行.
我在这里错过了一些简单的东西,还是这种方法不是要走的路?
我遇到过一些情况,当你试图用Ctrl + C杀死一个进程时,PowerShell ISE会冻结.我仍然可以在控制台周围移动光标,但状态仍然停留在"停止"状态.
这已经发生在几个命令中,但是我注意到一个特定的命令一直在发生
mvn jasmine:bdd
Run Code Online (Sandbox Code Playgroud)
此命令运行maven插件,启动jetty服务器.我可以使用Powershell控制台的Ctrl + C来停止此操作,但不能从Powershell ISE停止.这可能与Powershell ISE无法运行交互式命令这一事实有关吗?
现在我的解决方法是在另一个进程中"启动"maven.其他人遇到类似的问题?
谢谢
我正在将端口9999部署到本地和远程Jboss AS 7.1.1 Final .Maven使用jboss插件'jboss-as-maven-plugin:7.1.1.Final'来管理服务器的构建.我已确认服务器已启动并正在运行且端口可在9999访问.但"很多次"构建失败,本地和远程Jboss都出现以下错误.Jboss ic在独立模式单节点集群中配置.
扼杀构建不会每次都失败,但大部分时间都是如此.不确定我们是否需要将Maven插件升级到更高版本.
[INFO] ohmehMavenExecutionResultHandler - 构建因异常失败[INFO] ohmehMavenExecutionResultHandler - [1] org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标org.jboss.as.plugins:jboss-as-maven-plugin: 7.1.1.Final:undeploy(default-cli)on project测试:执行UNDEPLOY时出错[DEBUG]关闭与远程[ERROR]的连接无法执行目标org.jboss.as.plugins:jboss-as-maven-plugin:7.1 .1.Final:项目上的undeploy(default-cli)测试:执行UNDEPLOY时出错:java.net.ConnectException:JBAS012144:无法连接到remote:// localhost:9999.连接超时 - > [帮助1]
UPDATE
<plugin>
<groupId>org.jboss.as.plugins</groupId>
<artifactId>jboss-as-maven-plugin</artifactId>
<version>7.1.1.Final</version>
<configuration>
<filename>${project.build.finalName}.jar</filename>
<username>${userName}</username>
<password>${password}</password>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我现在使用最新版本的Maven插件,但现在似乎连接超时错误更频繁.我开始认为,当尝试使用应用程序的不同子项目进行太多远程部署时,Jboss的行为会有所不同.我正在从主POM部署21个子项目.样本配置如下
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.master</groupId>
<artifactId>master</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>Master</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modules>
<module>module1</module>
<module>module2</module>
<module>module3</module>
<module>module4</module>
<module>module5</module>
<module>module6</module>
<module>module7</module>
<module>module8</module>
<module>module9</module>
<module>module10</module>
<module>module11</module>
<module>module12</module>
<module>module13</module>
</modules>
Run Code Online (Sandbox Code Playgroud) 我们有许多使用Velocity生成项目的代码生成器.这一代可能非常复杂:
在调用velocity之前使用反射(以反省我们必须与之交互的第三方代理) - 将结果属性(复杂对象图)添加到速度上下文中
项目结构和文件可能会根据所选的选项而有所不同
模板不仅仅是变量替换(它们使用添加到速度上下文的自定义对象,它包含许多派生属性,包括在模板中迭代的其他对象的集合)
我喜欢用maven原型替换它们,因为它们也使用Velocity,但看起来它们似乎只能进行简单的变量替换和静态文件/文件夹结构.
有没有办法在从原型创建项目之前进行处理,将对象添加到速度上下文,并让原型模板能够访问它们?
如果是这样,创建的文件夹和文件是否可以动态?(或者每个变体需要一个单独的原型吗?)
或者编写自定义Mojo更好吗?(基本上用Maven插件包装现有的生成器)
我想知道是否可以通过父pom分发lombok.config.让我详细说明一下.假设我有一个父pom引用所有类型的可重用组件,其中包括库中使用的库dependencyManagement.在这些库中lombok,有几个组件使用它.其他项目将我们的pom设为父母,他们有一个工作的基础.Lombok通过a提供配置机制lombok.config.这应该在项目根目录中设置.此时我没有看到分发配置的方法.我该如何实现这一目标?或者这是不可能的还是反模式的.
根据http://docs.oracle.com/javafx/2/deployment/self-contained-packaging.htm:
要将自定义UI添加到MSI包,您可以使用6.2.4中的技术自定义JavaFX Packager使用的WiX模板文件.有关详细信息,请参阅WiX文档.
假设我弄清楚如何创建自定义模板文件,如何将其传递到JavaFX Maven插件?
我正在将我的系统的Maven运行时从3.0.5升级到3.1.1并尝试使用mvn clean install我通常的方式来构建我的项目.使用较旧的Maven运行时,构建将始终成功.但是,我现在总是在构建期间收到此错误消息:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project XYZ: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: 48188 -> [Help 1]
我想也许是因为我的依赖项和插件已经过时,所以我跑去mvn versions:use-latest-versions更新我的pom.xml版本.这仍然没有解决这个问题.有任何想法吗?
根据大众需求,这是我的pom.xml文件的样子.请注意,mvn versions:use-latest-versions除了Sitebricks和qdox之外,所有依赖项和插件版本都已更新,因为我不希望将更改集成到我的项目中.
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.company</groupId>
<artifactId>my-own-project</artifactId>
<version>1.0.1-SNAPSHOT</version>
<name>My Cool Maven Plugin</name>
<packaging>maven-plugin</packaging>
<distributionManagement>
<repository>
<id>someID</id>
<url>http://some.url.com</url>
</repository>
</distributionManagement>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
<dependency> …Run Code Online (Sandbox Code Playgroud) 我们需要获得我们服务的依赖项的所有许可。虽然很容易从报告插件(或mojohaus 的 license-maven-plugin)中获取它们,但我们的律师希望我们实际访问每个依赖项的来源并获取许可证文件。你知道我们如何才能做到这一点吗?
作为替代方案 - 如何获取工件的 scm 连接 URL?我可以使用这些信息来自动化这样的过程。
像这样的问题一直被问到,但不知怎的,他们只关注依赖性.因此,根据maven 文档,构建顺序确定如下.
- 项目依赖于构建中的另一个模块
- 插件声明,其中插件是构建中的另一个模块
- 插件依赖于构建中的另一个模块
- 构建中另一个模块的构建扩展声明
<modules>元素中声明的顺序(如果没有其他规则适用)
第一条规则是退出清除,例如,如果模块A依赖于模块B,则后者首先构建.
第五条规则(最后一条)也很清楚.如果前三条规则不适用,我们会查看模块部分中的顺序.
另外两条规则对我来说并不清楚.英语不是我的母语,但我想知道规则二是否包含某种拼写错误.
我正在寻找一个简单的例子来详细解释这两个规则.
maven ×10
java ×3
archetypes ×2
velocity ×2
windows ×2
dependencies ×1
javafx-2 ×1
jboss7.x ×1
licensing ×1
lombok ×1
maven-module ×1
maven-scm ×1
plugins ×1
powershell ×1
sbt ×1
scala ×1
wix ×1