我有5个项目的解决方案:
在开发整个解决方案时,我需要在02-SERVER
中嵌入04-DESKTOP
。这是在Eclipse IDE中轻松运行和调试应用程序所必需的,因为它们和客户端以及服务器都在一起开发。
但是要将应用程序部署到客户端,我需要单独构建02-SERVER
和04-DESKTOP
。我找到了准备部署的解决方案.zip - 它是maven-assembly-plugin
。它将所有.jars,配置文件,jasper模板组合在一个.zip(或文件夹)中。它完美无缺。但是当我尝试为多个平台创建04-DESKTOP
的部署包时出现了一个问题,至少这三个平台:Windows 32位,Windows 64位,Linux 64位(都在客户组织中使用)。
04-DESKTOP
的解决方案之一是配置文件。 Maven提供强大的配置文件系统。但问题是您可以使用一个配置文件运行maven,并且无法为多个配置文件调用maven。第二个想法是我调用maven为每个配置文件构建包使用父pom 02-SERVER
每次都重新编译,我不喜欢这个解决方案。
我的主要问题是如何使用单个命令准备5个软件包(一个服务器软件包和4个桌面软件包)?例如在父项目中调用mvn package
。
答案 0 :(得分:0)
我找了一会儿答案。这里有关于stackoverflow.com和答案的类似问题,但我没有找到我的问题的答案。经过一番研究和尝试后,我找到了解决方案。
我刚在解决方案中为我需要的每个平台添加了4个项目。所以我的解决方案现在有7个项目:
这些附加项目中的文件夹中没有源代码。但是这些项目中有pom.xml
。构建配置指向04-DESKTOP
sources文件夹:
<build>
<sourceDirectory>../04-DESKTOP/src</sourceDirectory>
</build>
因为所有这4个项目都是主项目中的模块,所以我不能给它们相同的artifactId
。但是maven-jar-plugin
默认情况下会创建名称等于artifactId的jar。因此,结果jar文件名在maven-jar-plugin
中重新定义:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix></classpathPrefix>
<mainClass>net.cloudstock.desktop.app</mainClass>
</manifest>
</archive>
<finalName>net.cloudstock.desktop-${project.version}</finalName>
</configuration>
</plugin>
其他一个项目的整个pom.xml
是:
<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>
<parent>
<!-- Information about parent project -->
<artifactId>net.cloudstock.system</artifactId>
<groupId>net.cloudstock</groupId>
<version>1.0.1</version>
</parent>
<artifactId>net.cloudstock.desktop.win32.x86</artifactId>
<name>Cloudstock Descktop frontend (Windows x86)</name>
<packaging>jar</packaging>
<properties>
<!-- Operation system where this app must run -->
<os>win32</os>
<!-- Processor architecture -->
<arch>x86</arch>
<!-- Variable to point sources to 04-DESKTOP/src folder -->
<desktop.root>../04-DESKTOP</desktop.root>
<!-- I am new in maven, so I can't comment this line -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<!-- Tell to the compiler where sources are -->
<sourceDirectory>${desktop.root}/src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix></classpathPrefix>
<mainClass>net.cloudstock.desktop.app</mainClass>
</manifest>
</archive>
<!-- Redefine result jar, because by default its name will be net.cloudstock.desktop.win32.x86-{VERSION}.jar -->
<finalName>net.cloudstock.desktop-${project.version}</finalName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>${desktop.root}/assembly.xml</descriptor>
</descriptors>
<!-- the name of the zip archive with program that I send to the customer -->
<finalName>net.cloudstock.desktop-${os}-${arch}-${project.version}</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- SWT for Win x86. It differs for different OSes and processors -->
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
<version>4.3</version>
</dependency>
<!-- Other application deps. They are duplicated in all 04-DESKTOP* projects -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>net.cloudstock</groupId>
<artifactId>net.cloudstock.client</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>net.cloudstock</groupId>
<artifactId>net.cloudstock.interface</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jface</groupId>
<artifactId>org.eclipse.jface</artifactId>
<version>3.8.0.v20120521-2329</version>
</dependency>
</dependencies>
</project>
这个架构中的一件事是不够好${desktop.root}/assembly.xml
您无法告诉maven-assembly-plugin在程序集中包含工件jar,因为它包含带有artifactId名称的jar。所以我添加了一个fileSet
来包含当前项目中生成的jar:
<fileSets>
<fileSet>
<directory>target</directory>
<outputDirectory>lib/</outputDirectory>
<includes>
<include>net.cloudstock.desktop-${project.version}.jar</include>
</includes>
</fileSet>
...
</fileSets>
最后,我在04-DESCTOP/pom.xml
中添加了依赖标记以包含02-SERVER
,并且通过os条件激活了四个配置文件:
<profile>
<id>win-x86-debug</id>
<activation>
<activeByDefault>false</activeByDefault>
<os>
<family>Windows</family>
<arch>x86</arch>
</os>
</activation>
<dependencies>
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
<version>4.3</version>
</dependency>
</dependencies>
</profile>
现在我在Eclipse的04-DESCTOP
项目中开发桌面应用程序。我可以运行并调试整个解决方案。
当我完成当前迭代并希望将应用程序发送给客户时,我使用父项目mvn package
中的一个命令构建它:
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] Cloudstock System ..................................... SUCCESS [2.202s]
[INFO] Helper Library by Nicolai Budico ...................... SUCCESS [4.563s]
[INFO] Cloudstock Interface .................................. SUCCESS [2.925s]
[INFO] Cloudstock Server ..................................... SUCCESS [3.835s]
[INFO] Cloudstock Client Backend ............................. SUCCESS [1.120s]
[INFO] Cloudstock Descktop frontend (Windows x86) ............ SUCCESS [9.019s]
[INFO] Cloudstock Descktop frontend (Windows x64) ............ SUCCESS [5.530s]
[INFO] Cloudstock Descktop frontend (Linux x86) .............. SUCCESS [5.158s]
[INFO] Cloudstock Descktop frontend (Linux x64) .............. SUCCESS [4.998s]
[INFO] ------------------------------------------------------------------------
在此解决方案中必须注意的最后一点是,如果在桌面应用程序配置中更改了某些内容,则需要编辑5个pom。
也许这个解决方案是错误的,也许它不是那么正确,但我对它非常满意。我真的希望这会对某人有所帮助。