gpt4 book ai didi

java - 使用 Maven 如何仅使用一个不同的 .java 文件构建 Java 项目的两个版本?

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:37 24 4
gpt4 key购买 nike

我想构建一个应用程序的两个版本,唯一的区别是我想交换一个特定 .java 文件的不同版本。我已经有一个用于构建源代码的 Maven 构建,以及一个 Ant 构建,然后使用嵌入式 JRE 将其打包为 zip

因此,我可以修改我的 Ant 构建,为这个新构建创建另一个 zip 文件,但是使用单个修改后的源文件来处理源重建的最佳方法是什么?

更新进度

我现在已经使用 main() 方法对起始类进行了子类化,因此不再需要交换源文件,而只需在 list 中传递 mainClass 的差异值,现在我们只需构建一棵源树。

所以在我的 pom.xml 中我有:

    <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>com.companyname.StartClass</mainClass>
<packageName>com.companyname</packageName>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>

那么我可以拥有多个这样的程序集插件,这样我就可以构建两个 list 中不同的程序集吗?

最佳答案

基本上这违背了 Maven 的一些核心概念:

  • 一个项目一个 <build>/<sourceDirectory> 这会导致一件文物。
  • 具有相同名称的 Artifact (默认情况下 <finalName> 派生自 <artifactId><version>)应该具有相同的内容。

有几种解决方案:

  • 一个property来自在 if 中评估的属性文件实现不同的运行时行为。你不喜欢那样。
  • 一个property通过在 if 中评估的命令行定义.
  • 一个text from a resource file这是在 if 中评估的。你不喜欢那样。
  • 一个command line argument这是在 if 中评估的.
  • 一个Java assertion ,但从那里引用:“不要使用断言来完成应用程序正确操作所需的任何工作。”。

一种 Maven 方法是:

 

  <profiles>

<profile>
<id>B</id>
<activation>
...
</activation>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>B</artifactId>
<version>...</version>
</dependency>
</dependencies>
<build>
<finalName>AwithB</finalName>
</build>
</profile>

<profile>
<id>C</id>
<activation>
...
</activation>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>C</artifactId>
<version>...</version>
</dependency>
</dependencies>
<build>
<finalName>AwithC</finalName>
</build>
</profile>

</profiles>

记住开头的第二个概念:相同的名称,相同的内容(和行为)。您可以使用 <finalName>配置文件中的声明以相应地调整 A 的名称。

关于java - 使用 Maven 如何仅使用一个不同的 .java 文件构建 Java 项目的两个版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42285827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com