- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基本上,我们有一个具有多个依赖项的耳朵存档。在这些依赖项中,我们计划使用多个属性填充 list 或某些属性文件:
对于我们的 CI 服务器构建的单个 Artifact 来说,这应该已经是可能的,而且这也不是我真正遇到的问题。
<小时/>现在我使用 maven 和 maven-ear-plugin 来构建我的 ear 存档。我的想法是只使用一个 groovy 脚本(由 gmaven-plus 执行)来读取所有 jar 文件,并获取 list 。然后我可以重写ear存档的 list ,或者编写我自己的包含我想要的信息的属性文件。
import org.apache.commons.io.FileUtils
import java.util.jar.JarFile
def path = "target/${project.name}-${project.version}"
def artifactDir = new File(path)
def output = new File("$path/META-INF/build-info.properties")
def lines = []
artifactDir.listFiles().each { file->
if (file.isFile() && (file.name.endsWith(".war") || file.name.endsWith(".jar"))) {
def jar = new JarFile(file)
def manifest = jar.manifest
println "processing: $file.name"
println manifest.mainAttributes
println jar.properties
manifest.mainAttributes.keySet().each { attrKey->
def val = manifest.mainAttributes.getValue(attrKey.toString())
lines << "$file.name.$attrKey=$val"
}
}
}
FileUtils.writeLines(output, lines as Collection<?>
)
这个脚本工作正常,并且会编写 build-info.properties
文件,其中包含我想要的所有信息。
这是插件配置:
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>create-manifest</id>
<phase>package</phase>
<goals>
<goal>execute</goal>
</goals>
</execution>
</executions>
<configuration>
<scripts>
<script>file:///${project.basedir}/src/main/gmaven/create-manifest.groovy</script>
</scripts>
</configuration>
</plugin>
当然,你已经注意到这有什么问题了:package
阶段太晚了,prepare-package
太早了,因为ear插件还没有尚未复制我正在扫描的依赖项。
嗯,显而易见的做法是解压缩生成的耳朵,然后手动添加文件,然后再次压缩。但这对我来说似乎很肮脏,我想知道是否没有更干净的方法来做到这一点?
也许通过利用 gradle 或我尚未发现的 maven-ear-plugin 的某些选项?或者一般来说,您将如何解决我在这里面临的具体问题?
最佳答案
为什么不使用 Maven 的可能性..比如 the archiver 的配置这意味着您可以对 maven-jar-plugin 使用这样的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
<configuration>
<archive>
<addMavenDescriptor>true</addMavenDescriptor>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<artifactId>${project.artifactId}</artifactId>
<groupId>${project.groupId}</groupId>
<version>${project.version}</version>
</manifestEntries>
</archive>
</configuration>
</plugin>
这也可以用于 maven-war-plugin、maven-ejb-plugin 和 maven-ear-plugin...请参阅 docs for maven-ear-plugin请参阅存档
条目。
CI 解决方案(例如 Jenkins)的内部版本号有一个环境变量 BUILD_NUMBER
,您也可以使用它...
公司 pom 的完整示例 take a look here .
更新:
我错过的是您可以使用过滤来创建此类文件。将包含以下内容的文件放入 src/main/resources
中:
groupId=${project.groupId}
artifactId=${project.artifactId}
version=${project.version}
将以下内容定义为 pom 文件的一部分:
... src/主/资源 真的
此外,这会将上述文件打包到您的ear/war/jar 文件中。
除此之外,还可以在包含上述信息的归档 META-INF/groupId/artifactId/pom.properties
中找到已包含上述信息的文件。不是构建号和构建时间...
构建时间可以通过以下方式使用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifestEntries>
<buildTime>${maven.build.timestamp}</buildTime>
<buildNumber>${env.BUILDNUMBER}</buildNumber>
</manifestEntries>
</archive>
</configuration>
</plugin>
${env.BUILDNUMBER}
当然是对包含此类信息的 bass 变量的引用。
关于java - 如何将动态生成的文件添加到我的耳朵存档中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36036525/
我是一名优秀的程序员,十分优秀!