我正在尝试使用mercurial将我的Maven生成的站点部署到googlecode项目.当我做的时候
mvn site:deploy
Run Code Online (Sandbox Code Playgroud)
我收到转移错误:org.apache.maven.scm.NoSuchCommandScmException:没有这样的命令'list'.
就像它试图做一个"svn列表",即使我使用的是mercurial.
在我的pom我有maven旅行车和mercurial设置(我认为正确):
org.apache.maven.wagon wagon-scm 1.0-beta-6 org.apache.maven.scm maven-scm-provider-hg 1.4
然后,对于我的站点部署,我有一个单独的mercurial存储库:
<distributionManagement>
<site>
<id>googlecode</id>
<name>googlecode site</name>
<url>scm:hg:${project.site.scm}/</url>
</site>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
在我的settings.xml中,我有:
<servers>
<server>
<id>googlecode</id>
<username>...</username>
<password>...</password>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud) 我试图模仿Spring的AspectJ @Async支持但是使用消息总线.
问题是我需要知道我的消息总线(RabbitMQ MessageListener)是调用方法还是正常(所有其他)调用方,方法将立即返回.
我的注释称为@MQAsync而不是Springs @Async.
package com.snaphop.mqueue;
import org.apache.log4j.Logger;
import com.snaphop.mqueue.MQAsync;
public aspect MQAsyncAspect {
//pointcut asyncTypeMarkedMethod() : execution(@MQAsync void *(..));
pointcut asyncTypeMarkedMethod() : call(@MQAsync void *(..));
private static final Logger log = Logger.getLogger("MQAsync");
Object around() : asyncTypeMarkedMethod() {
if (listenerIsCaller) {
return proceed();
}
//Send the method parameters to the message bus.
//this logic isn't here for brevity.
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
该呼叫切入点会让我呼叫者上下文,但是这是行不通的,因为我将调用通过反射我的消息监听器的方法.在执行切入点(注释掉)不会告诉我,谁是调用方法.
有没有办法通过某种堆栈转储分析来确定调用者类?
maven-release-plugin
如果有单元测试失败,我很长时间不会发布(也就是将jar部署到maven repo).
出于各种原因,我想只使用maven部署插件,但显然即使在测试失败的情况下仍会部署maven-surefire-plugin
.
因此而不仅仅是
mvn clean deploy
Run Code Online (Sandbox Code Playgroud)
我必须设置我的CI与(shell)做两步:
mvn clean test && mvn deploy -DskipTests=true
Run Code Online (Sandbox Code Playgroud)
我已经确定肯定没有设置忽略失败.理想情况下,我不想运行两个单独的进程.
当然,测试失败的部署不能是默认的吗?我错过了什么吗?
编辑它似乎是詹金斯问题..无法重现
我不确定Jenkins为什么或如何强制maven构建继续测试失败(我假设这是用于报告)但它没有显示任何传递给它的选项以继续.它似乎只发生在詹金斯说"模块改变,重新计算依赖图"时.
之前已经使用注释语法对此进行了回答:Aspectj覆盖方法的参数
但我无法弄清楚如何使用AspectJ声明语法来实现它.以下应该在方法中的每个字符串前添加"Poop",但事实并非如此.
public aspect UserInputSanitizerAdvisor {
pointcut unSafeString() : execution(@RequestMapping * * (..));
Object around() : unSafeString() {
//thisJoinPoint.getArgs();
//proceed();
System.out.println("I'm Around");
Object[] args = thisJoinPoint.getArgs();
if (args != null) {
for (int i = 0; i < args.length; i++) {
Object o = args[i];
if (o != null && o instanceof String) {
String s = (String) o;
args[i] = "poop: " + s;
}
}
}
return proceed();
}
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何给出"proceed()"所有的论点.
我有一些ISO-8859-1文本,我试图转换为UTF-8但最终得到一些未正确映射的字符.我一直在使用过多的标准内置Java字符集转换,它们基于Charset.decode和内置的CharsetDecoder.
这导致两个问题:
对于MySQL,我得到了异常(参见上面的链接):
引起:java.sql.SQLException:字符串值不正确:'\ xC2\x9Esk\xC3\xA9 ...'为第1行的列'b'
是否有比内置的Java iconv或更好的字符解码器/映射器?
可能重复:
考虑提供静态工厂方法而不是构造函数
这可能是一个有争议的问题,可能不适合这个论坛(所以如果你选择关闭这个问题,我不会被侮辱).
看来Java的当前功能似乎没有理由构建构造器public
...... 永远.友情,private
,protected
是确定的,但public
没有.
似乎提供public static
创建对象的方法几乎总是更好的主意.每个Java Bean序列化技术(JAXB,Jackson,Spring等......)都可以调用受保护或私有的无参数构造函数.
我的问题是:
编辑:我解释为什么静态方法更好.
0.1.对于一个你得到更好的类型推断.例如,请参阅Guava的http://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained
0.2.作为该类的设计者,您可以稍后使用静态方法更改返回的内容.
0.3.处理构造函数继承很痛苦,特别是如果你必须预先计算某些东西.0.4.更多理由:https://stackoverflow.com/a/3852556/318174
我应该发布这是针对公共API的代码.我经常违反各种规则(比如使用直接现场访问)进行单元测试,方便,因为我很懒.因此,当我的意思是,我的意思是你把它释放到野外.
我找到了Erlang的模块arity import /n
,其中n是参数的数量而不是奇怪的.
在Java和其他各种语言中,您可以执行以下操作:
import static com.stuff.Blah.myFunction;
Run Code Online (Sandbox Code Playgroud)
Blay.myFunction(..)
无论参数如何,都将导入所有重载.
此外,我想明确为什么语言设计师认为这是一个好主意(我不是试图批评语言......只是好奇)?
myFunction
?