在Java中,可以将常量String作为参数传递给注释,但我无法弄清楚如何在Groovy中执行相同的操作.
例如:
@Retention(RetentionPolicy.RUNTIME)
@Target(value=[ElementType.METHOD])
public @interface MyGroovyAnnotation {
String value()
}
class MyGroovyClass {
public static final String VALUE = "Something"
@MyGroovyAnnotation(value=VALUE)
public String myMethod(String value) {
return value
}
}
Run Code Online (Sandbox Code Playgroud)
这里,在方法myMethod注释的地方@MyGroovyAnnotation,如果我传递一个字符串文字@MyGroovyAnnotation(value="Something"),它可以很好地工作,但是如果我尝试VALUE在上面的例子中传递,我得到:
来自Eclipse:
Groovy:Expected 'VALUE' to be an inline constant of type java.lang.String in @MyGroovyAnnotation
Run Code Online (Sandbox Code Playgroud)
从GroovyConsole运行:
expected 'VALUE' to be an inline constant of type java.lang.String not a field expression in @MyGroovyAnnotation
at line: 20, column: 31
Attribute 'value' should have type …Run Code Online (Sandbox Code Playgroud) 我正在使用vagrant在VirtualBox中创建一个Red Hat Enterprise Linux 7 VM.如果我有一个基本框,它既没有VirtualBox客户添加,也没有注册,那么我手动需要执行以下操作:
我需要首先执行注册的原因是要安装guest虚拟机添加,我需要安装一些额外的包.
现在,有这些任务的第三方流浪汉插件:vagrant-registration和vagrant-vbguest.
我遇到的问题是该vagrant-vbguest插件将始终首先尝试运行,并且无法下载所需的软件包,因为该vagrant-registration插件还没有机会注册系统.
有没有办法强迫其中一个在另一个之前运行?或者我还没有想过的任何其他替代解决方案(我不是流浪精灵(或者只是被称为流浪汉?))?
我有一个maven项目,该项目具有从远程Nexus存储库获取的依赖项。我相信该依赖关系不是使用Maven构建的,而是使用准系统POM文件上传的。但是服务器上的布局看起来不错,因此它可能是通过maven部署的。
当maven将依赖项下载到我的本地存储库时,它将下载jar文件,但未获取POM。在构建时,有一条警告,指出找不到POM,并且没有可用的依赖项信息。我实际上并没有直接使用其任何代码(实际上是传递依赖),因此构建成功完成。
当我尝试为我的项目执行站点生成时,就会出现真正的问题。尝试生成依赖关系图报告的部分失败,因为它找不到该依赖关系可使用的POM。
我无法弄清楚为什么我没有下载POM,但是下载的jar文件就很好了。
该特定依赖项的POM文件如下所示(您可以看到为什么我不认为它是使用maven构建的:)
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.company.component</groupId>
<artifactId>my-artifact</artifactId>
<version>1.0.1</version>
</project>
Run Code Online (Sandbox Code Playgroud)
您会注意到,根<project>元素不包含任何名称空间或架构信息。这可能有关吗?是Nexus无法将其识别为POM吗?除了可能会丢失或误解一些小的语法字符外,这也是我目前的思路...请不要让它影响您可能拥有的任何想法!:)
另外,在进行故障排除时,我将远程POM文件的内容粘贴到了本地.m2存储库中的正确文件位置。当我这样做时,一切正常。但是,这不是可以接受的修复,因为我们将需要在CI构建服务器上完成构建。
任何帮助/建议,不胜感激!
编辑:
我已经设法暂时解决了我的实际问题,但是这里的陌生感仍然存在。我通过从pom中的依赖项中明确排除依赖于此的事物来解决了该问题(麻烦部门至少相距两步,并且我没有使用任何使用将其引入的事物):
<dependency>
<groupId>com.company.utility</groupId>
<artifactId>shared-utility</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>com.company.common.component</groupId>
<artifactId>thing-that-puls-in-bad-artifact</artifactId>
</exclusion>
</exclusions>
</dependency>
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company.project</groupId>
<artifactId>my-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.company.component</groupId>
<artifactId>bad-artifact</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
现在,在中~/.m2/repository/com/company/compnent/bad-artifact/1.0.1/,我得到:
_remote.repositories
bad-artifact-1.0.1.jar
bad-artifact-1.0.1.jar.sha1
bad-artifact-1.0.1.pom.lastUpdated
Run Code Online (Sandbox Code Playgroud)
没有实际的POM文件。
如果我有这样的自定义资源定义:
$ kubectl get crd unifiedpushservers.push.aerogear.org
NAME CREATED AT
unifiedpushservers.push.aerogear.org 2019-06-05T13:39:23Z
Run Code Online (Sandbox Code Playgroud)
是否可以创建一个ResourceQuota将此类自定义资源的计数限制为 1,拒绝尝试创建其他资源的方法?
这是我迄今为止尝试过的:
apiVersion: v1
kind: ResourceQuota
metadata:
name: unifiedpushservers-limit
spec:
hard:
count/unifiedpushservers.push.aerogear.org: 1
Run Code Online (Sandbox Code Playgroud)
虽然这被接受和创建,但似乎计数不起作用,我能够创建多个实例。
编辑:如果我引用规范中字段的整数值,如下所示:
apiVersion: v1
kind: ResourceQuota
metadata:
name: unifiedpushservers-limit
spec:
hard:
count/unifiedpushservers.push.aerogear.org: "1"
Run Code Online (Sandbox Code Playgroud)
然后我在尝试创建一个实例时收到以下错误消息:
Error from server (Forbidden): error when creating "./deploy/crds/push_v1alpha1_unifiedpushserver_cr.yaml": unifiedpushservers.push.aerogear.org "example-unifiedpushserver" is forbidden: status unknown for quota: unifiedpushservers-limit
Run Code Online (Sandbox Code Playgroud)
这感觉像是进步,但我可能会越来越远,我不确定。
另外,我应该提到我正在 OpenShift v3.11 集群上尝试这个,它返回以下 Kubernetes 版本信息:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"11+", GitVersion:"v1.11.0+d4cacc0", GitCommit:"d4cacc0", GitTreeState:"clean", BuildDate:"2018-10-10T16:38:01Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"} …Run Code Online (Sandbox Code Playgroud) annotations ×1
groovy ×1
java ×1
kubernetes ×1
maven ×1
nexus ×1
openshift ×1
rhel ×1
vagrant ×1
virtualbox ×1