我正在从TeamCity运行maven构建并使用build.vcs.number将Subversion修订版写入我的清单.在使用Subversion作为VCS的任何Maven构建中,TeamCity补充道
-Dbuild.vcs.number=1234
Run Code Online (Sandbox Code Playgroud)
到maven命令行,其中1234是正在构建的分支中的最新修订版.
然后在我的pom.xml中,我有
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<build>${build.vcs.number}</build>
</manifestEntries>
</archive>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这一切都正常,直到我运行Maven release:perform(也来自TeamCity),此时$ {build.vcs.number}变为null,即使我在TeamCity构建日志中可以看到该属性是在命令中传入的线.
maven-release-plugin文档暗示Maven在执行目标期间的某个时刻运行分叉进程 - 这就是我遇到问题的原因吗?
有没有办法可以确保将此特定属性传递给该分叉进程?
有没有一种简单的方法,使用Java Swing,在我的工作站上显示Java系统属性名称和值?
基本上,我正在寻找的是一个Java Swing应用程序,它显示如下:

我有一个非常简单的maven描述符,它定义了一些属性:
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<properties>
<it.port>8080</it.port>
</properties>
</project>
Run Code Online (Sandbox Code Playgroud)
我可以it.port用命令覆盖属性:
$ mvn -Dit.port=8181 verify
Run Code Online (Sandbox Code Playgroud)
但是以下命令不能按预期工作:
$ MAVEN_OPTS="-Dit.port=8181" mvn verify
Run Code Online (Sandbox Code Playgroud)
这将系统变量传递给JVM,但是maven拒绝覆盖此属性和给test(8080)的默认值.原始问题是TeamCity(out CI服务器)将系统变量传递给JVM MAVEN_OPTS,因此属性覆盖不起作用.
我可以用MAVEN_OPTS环境变量覆盖maven属性吗?
我有一些Java代码,它取决于系统属性super.secret.password.我需要在运行我的应用程序时设置该属性.该应用程序将由shell脚本启动,密码将保存在具有最小读取权限的文件中.
我真的不想写:
java -Dsuper.secret.password=letmein gov.fortknox.MyApp
Run Code Online (Sandbox Code Playgroud)
因为那时任何人都可以进入机器运行ps或者top可以看到密码是什么.
那么,有没有一种很好的方法来设置系统属性而不在命令行上公开它们?
我们提出的唯一通用解决方案是编写一个从文件中读取系统属性的小型C程序,然后使用JNI调用API启动JVM .不用说,我们并不热衷于这样做.
如果没有办法在不使用命令行的情况下设置它们,有没有办法隐藏命令行不被窥探?我们正在使用Red Hat Enterprise Linux Server 5.5.
对于它的价值,有问题的应用程序实际上是JBoss EAP 4.3.0,我们正在使用系统属性${like.this}在其XML配置文件中填写替换构造().有JBoss特定的解决方案 - 使用SystemPropertiesService(默认情况下,通过deploy目录中的properties-service.xml文件配置)或将-P选项传递给run.sh. 但是,我对更一般的情况感兴趣,这可能是任何Java程序.
的build.gradle
tasks.withType(Test){
systemProperties=System.properties
println systemProperties['param']
}
Run Code Online (Sandbox Code Playgroud)
现在我可以在命令行中传递参数:
gradle test -Dparam=10
Run Code Online (Sandbox Code Playgroud)
或者将它们放在gradle.properties中:
systemProp.param=15
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想将默认值放在gradle.properties中,并能够从命令行覆盖它们.不幸的是,如果我这样做,gradle.properties具有优先权,并被-Dparam=10忽略.
你能提供任何解决方案吗?
我可以(在清单文件或其他地方)为我的Android应用程序设置系统属性吗?
我想使用可以使用系统属性配置的库,并且能够仅使用该机制将减少我需要编写的代码量.
它们是否有任何潜在问题(安全性、性能)或与使用System.getProperty()/System.setProperty()在 Java 中存储应用程序范围的变量相关的普遍不良情绪?
是否可以通过 JNDI 访问 Wildfly 属性(在 standalone.xml 中定义)?喜欢:
<system-properties>
<property name="MY_PROPERTY" value="some value"/>
...
</system-properties>
Run Code Online (Sandbox Code Playgroud)
并在java中阅读它:
@Resource(lookup = "java:comp/env/MY_PROPERTY")
private String property;
Run Code Online (Sandbox Code Playgroud) 因此,我们看到大量 EC2 从站离线(使用 EC2 插件)。因此,为了调试它,我试图根据文章Pinging 线程禁用ping 线程,他们讨论了使用以下方法禁用正在运行的 jenkins 上的主 JVM 上的 ping 线程:
Jenkins.instance.injector.getInstance(hudson.slaves.ChannelPinger.class).@pingInterval = -1
并且要禁止从站 ping 主站,系统属性 -Dhudson.remoting.Launcher.pingIntervalSec=-1 需要设置为从站。
问题:
我们看到大量奴隶离线,我想看看 ping 间隔是否有帮助。
谢谢,杰森
我使用Maven和有系统属性的列表-DA=alpha,-DB=beta -DS=random_stuff我想传承给单元测试当Maven运行,并且不能进入pom文件。
Surefire和Failsafe插件基本上都说你可以通过-DargLine系统属性将值传递给测试。
通常它定义在pom.xml,例如
<argLine>-DA=alpha -DB=beta -DS=random_stuff</argLine>
Run Code Online (Sandbox Code Playgroud)
但是我也看到-DargLine=...了从命令行传入的示例。
我相信我需要在要传入的系统属性周围加上引号 via argLine,因为它们是空格分隔的:
-DargLine="-DA=alpha -DB=beta -DS=random_stuff"
Run Code Online (Sandbox Code Playgroud)
现在我想通过MAVEN_OPTS环境变量传递它们(它还“携带”其他系统属性,而不仅仅是argLine)。到目前为止我所拥有的是:
MAVEN_OPTS="-Dxyz=abc ... -DargLine=\"-DA=alpha -DB=beta -DS=random_stuff\""
Run Code Online (Sandbox Code Playgroud)
换句话说,我逃脱了argLine引号。不幸的是,结束引号现在被视为-DS's value 的一部分,即S现在被替换为random_stuff"- 而不是我想要的。
我怎么可以做我想做的事,即请确保A,B以及S在传递作为的一部分argLine,并通过argLine为部分通过MAVEN_OPTS?
PS:我也厌倦了内部单引号(同样无法使用的结果: some_stuff')和未转义的内部双引号(MAVEN_OPTS=" ... -DargLine="-DA=alpha ..."",在尝试获取源时导致错误.bash_profile),都没有成功......
shell command-line environment-variables system-properties maven