我有一个自定义插件,作为 release:perform 目标的一部分,我在我们所有的项目上运行它。
我们刚刚开始使用多模块构建,我注意到我的插件只在顶层模块中运行。在发布结束时,我必须对我的插件做什么才能使其在所有模块上单独运行?我是否必须在插件代码本身中遍历它们?如果是这样,是否有这样做的示例,因为从我看来,MavenProject.getModules() 只返回这些模块的字符串名称列表,而我看不到如何获取这些模块的信息(我的插件需要每个的 groupId:artifactId:version,在这种情况下,模块并不总是具有相同的版本)。
我已经尝试过使用和不使用 @aggregator,但这并没有改变我的问题。
我假设这与从 CLI 直接运行插件(不绑定到阶段)相同,它也只在项目的顶层运行,并报告所有子模块的 SKIPPED。
我正在使用 Maven 3.0.3。
为什么Mojo :: DOM开发人员创建自己的选择器而不使用XPath语法?
我想使用 Maven 的密码加密,例如它用于节点的 Mojo 属性。我尝试将加密密码粘贴到 mojo 的正确属性中,但它将其视为纯文本。我希望有一个我可以在 Mojo 属性的注释上设置的属性来解释它可以被加密,如果是这样,使用系统主密码来解密,但我在文档中没有看到任何内容那。
有没有人设法将 Maven 的密码加密用于服务器密码节点以外的任何内容?很想为我的 Mojo 做这项工作。
我实现了自己的 Maven 插件 mojo,其中使用了 log4j + slf4j。在插件项目中,我已经包含了正确的 jar,并且可以从代码中看到正确的语句记录。
现在我想在另一个客户端项目中使用这个新的 Maven 插件,但无法使其正常工作。
在插件本身中,我在 src/main/resources 下包含了一个 log4j.properties ,它可以正常工作,如上所述。但是,当我尝试将该插件包含在另一个客户端项目中时,不会创建日志文件。
问题是我还必须尝试或做什么才能使其正常工作?谢谢。
我正在运行别人的pom.xml,它具有:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>${main.class.remote-query}</mainClass>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
当我使用-X运行mvn时,不会显示执行的实际命令。将Java更改为exec可能会提供它,但是我很好奇在使用Java时是否有办法查看完整的命令行。
我目前正在努力清理一个我用Mojolicious写的小网页应用程序.作为清理的一部分,我将我的javascript从html.ep文件中分离到公共目录中.
我遇到的问题是我似乎无法再引用标记助手,例如'url_for'或甚至引用存储中的值,例如'<%$ stashvalue%>'.
关于如何或如果我能做到这一点的任何想法非常感谢.
干杯.
基于文档和邮件线程,我已经看到了将maven项目注入我的mojo的3种方法:
/**
* Project instance
*
* @parameter default-value="${project}"
* @required
* @readonly
*/
private MavenProject project;
@Component
private MavenProject project;
@Parameter( expression = "${project}" )
private MavenProject project;
Run Code Online (Sandbox Code Playgroud)
但无论我选择哪一个,当我根据我在maven docs中找到的示例运行单元测试时,project始终为null.
public void testMojoGoal() throws Exception {
File testPom = new File(getBasedir(),
"src/test/resources/unit/basic-test/sample-sh-project-config.xml");
ShunitResourcesMojo mojo = (ShunitResourcesMojo) lookupMojo("prepare",testPom);
assertNotNull(mojo);
mojo.execute();
}
Run Code Online (Sandbox Code Playgroud)
mojo执行包含(并失败)
Validate.notNull(project);
Run Code Online (Sandbox Code Playgroud) 如果本地存储库中已经存在工件,我如何从 Mojo 中检查?
我正在将大型二进制文件安装到本地 Maven 存储库中,我需要在尝试下载它们之前知道它们是否已经存在。
我无法通过以下Mojo::UserAgent
调用将JSON发布到服务器:
use Mojo::UserAgent;
my $ua=Mojo::UserAgent->new;
my $json = $ua->post("localhost:6767" => {} => json =>{ val=>10 })->res->json;
Run Code Online (Sandbox Code Playgroud)
在另一侧使用假调试服务器,nc -l 6767
提供以下输出:
POST / HTTP/1.1
User-Agent: Mojolicious (Perl)
Connection: keep-alive
Content-Length: 0
Host: localhost:6767
Run Code Online (Sandbox Code Playgroud)
这不仅仅是json
方法,form
整个Transactor似乎在我的两台机器上被打破了.来自文档:
perl -MMojo::UserAgent::Transactor -E 'say Mojo::UserAgent::Transactor->new->tx(PUT => "http://kraih.com" => json => {a => "b"})->req->to_string;'
PUT / HTTP/1.1
Content-Length: 4
Host: kraih.com
json
Run Code Online (Sandbox Code Playgroud)
很难相信我的眼睛.我错过了什么?
我有perl应用程序,例如,在谷歌并行搜索:
use Mojo::UserAgent;
use Mojo::IOLoop;
my $ua = Mojo::UserAgent->new();
my $delay = Mojo::IOLoop->delay(sub { say 'DONE1 (should be before render)'; });
foreach my $i ( 1 .. 10 ) {
$delay->begin();
$ua->get("http://www.google.ru/search?q=$i" => sub {
say $i;
$delay->end();
});
}
$delay->wait() unless $delay->ioloop->is_running();
say 'DONE2 (should be before render)';
say 'Found! (render)';
Run Code Online (Sandbox Code Playgroud)
它的工作正常:
6
1
7
10
3
9
2
5
8
4
DONE1 (should be before render)
DONE2 (should be before render)
Found! (render)
Run Code Online (Sandbox Code Playgroud)
当我在控制器中的Mojolicious应用程序中使用此代码时:
package MyApp::Google;
use Mojo::Base …
Run Code Online (Sandbox Code Playgroud) mojo ×10
maven ×5
perl ×4
mojolicious ×3
command-line ×1
dom ×1
encryption ×1
events ×1
java ×1
javascript ×1
jquery ×1
log4j ×1
logging ×1
maven-2 ×1
maven-plugin ×1
slf4j ×1
unit-testing ×1
user-agent ×1
xpath ×1