我有一个案例,我必须在预定义的xml文件中编写一个项目依赖项的工件名称,它将与项目jar一起保存并驻留在项目的资源文件夹中。 例如 predefind.xml -
<project>
<projectName>somename</projectName>
<projectjar>
<name>some.jar</name>
</projectjar>
<dependantJarsInfo>
<folderName>dependant_jars</folderName>
<dependantJars>
<name>dependency.jar</name>
</dependantJars>
</dependantJarsInfo>
</plugin>
的pom.xml
<project>
<groupId>com.mycom</groupId>
<artifactId>someproject</artifactId>
<packaging>jar</packaging>
<version>5.8.0.0</version>
<dependencies>
<dependency>
<groupId>com.mycom.</groupId>
<artifactId>dependency</artifactId>
<version>LATEST</version>
</dependency>
</dependencies>
</project>
我需要获取像dependency-1.2.0这样的全名,其中LATEST = 1.2.0,并在指定的标签处写入给定的predefined.xml文件。
<dependantJars>
<name>dependency.jar</name>
</dependantJars>
如果是的话可以和maven一起使用,那怎么样?如果没有,那么我应该采取什么替代方案来解决这个问题。
答案 0 :(得分:0)
我认为你实际上对你的问题采取了错误的方法。您应该尝试使用Maven Properties。
示例强>
您可以在pom.xml
中定义页面名称:
<project>
<properties>
<package.name>dependency.jar</package.name>
</properties>
</project>
然后,当您想使用命令行更改包的名称时,可以使用以下命令覆盖它:
mvn -Dpackage.name=othername package ...
但是,如果您不覆盖软件包的名称,仍然可以使用pom.xml
mvn package ...
关于此的其他问题:
答案 1 :(得分:0)
在对这个问题进行研究后,我得到了解决方案。 我使用两个maven插件来解决它。
使用此插件 -
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>build-classpath</id>
<phase>validate</phase>
<goals>
<goal>build-classpath</goal>
</goals>
<configuration>
<outputFile>target/classPath.txt</outputFile>
<includeArtifactIds>
dependency
</includeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<id>groovy-magic</id>
<phase>prepare-package</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
def theInfoName = "target/classPath.txt";
File theInfoFile = new File(theInfoName)
def words
def key
def value
if (!theInfoFile.exists()) {
println "File does not exist"
} else {
theInfoFile.eachLine { line ->
if (line.trim().size() == 0) {
return null
} else {
words = line
File theInfoFileto = new File(words)
ant.replace(file: "target/classes/myPackagepath/predefind.xml", token: "dependency.jar", value: theInfoFileto.getName())
}
}
}
</source>
</configuration>
</execution>
</executions>
</plugin>
希望这会对某人有所帮助。