переключатель определенно предпочтен. Легче посмотреть на список переключателя случаев & знайте наверняка, что это делает, чем считать длинное если условие.
дублирование в if
условие плохо обращается с глазами. Предположим, что один из эти ==
был записан !=
; Вы заметили бы? Или если один экземпляр 'numError' был записан 'nmuError', который просто, оказалось, скомпилировал?
я обычно предпочитал бы использовать полиморфизм вместо переключателя, но без большего количества деталей контекста, трудно сказать.
Что касается производительности, Ваш лучший выбор состоит в том, чтобы использовать профилировщика для измерения уровня приложения в условиях, которые подобны тому, что Вы ожидаете в дикой природе. Иначе Вы, вероятно, оптимизируете в неправильном месте и неправильным способом.
Все это, чтобы сказать: есть ли простой способ создать WAR и упаковать его в этот тривиально простой EAR? Я бы не хотел поддерживать их как два отдельных проекта, но также предпочел бы не прибегать к чрезмерно беспорядочным взломам с использованием сборок для достижения этой цели.
Краткий ответ: нет , простого maven не существует - способ сделать это, поскольку это противоречило бы правилу Maven, которое гласит «один артефакт на проект» (понимайте, что один результат на проект, что верно в 99% случаев).
И на самом деле я настоятельно рекомендую не идти хакерским путем и забыть об использовании сборок для создания EAR. Вместо этого создайте два модуля, один с упаковкой типа war
, другой с упаковкой типа ear
в зависимости от артефакта войны и объявляет их как модули родительского pom.xml
. Примерно так:
my-project
|-- pom.xml // packaging of type pom and my-war and my-ear as modules
|-- my-war
| `-- pom.xml // packaging of type war
`-- my-ear
`-- pom.xml // packaging of type ear
Если вы выберете Maven, воспользуетесь философией Maven, не сражайтесь с ней, это избавит вас от боли. Серьезно, взлом сборок для выполнения того, что уже делает maven-ear-plugin, - это просто защита от DRY. В таком случае лучше придерживаться Ant.
взлом сборок, чтобы делать то, что уже делает maven-ear-plugin, - это просто защита от DRY. В таком случае лучше придерживаться Ant. взлом сборок, чтобы делать то, что уже делает maven-ear-plugin, - это просто защита от DRY. В таком случае лучше придерживаться Ant.В Maven каждый отдельный проект создает артефакт. В вашей ситуации предлагаю создать два проекта: один для войны и один для ушей. Если вам нужно несколько версий ваших проектов, вы можете добиться этого с помощью классификаторов и профилей.
Это отрывок из примеров для richfaces.
<plugin>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>jee5</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
<configuration>
<webappDirectory>${project.build.directory}/${project.build.finalName}-jee5</webappDirectory>
<classifier>jee5</classifier>
<packagingExcludes>WEB-INF/lib/jsf-api*,WEB-INF/lib/jsf-impl*,WEB-INF/lib/el-*</packagingExcludes>
<warSourceExcludes>WEB-INF/lib/jsf-api*,WEB-INF/lib/jsf-impl*,WEB-INF/lib/el-*</warSourceExcludes>
</configuration>
</execution>
<execution>
<id>tomcat6</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
<configuration>
<webappDirectory>${project.build.directory}/${project.build.finalName}-tomcat6</webappDirectory>
<classifier>tomcat6</classifier>
<packagingExcludes>WEB-INF/lib/el-*</packagingExcludes>
<warSourceExcludes>WEB-INF/lib/el-*</warSourceExcludes>
</configuration>
</execution>
</executions>
<configuration>
<webResources>
<resource>
<directory>${basedir}/src/main/java</directory>
<targetPath>/WEB-INF/src</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
В вашем наушнике используйте профили для импорта необходимой зависимости с соответствующим классификатором.
<profile>
<id>jee5</id>
<dependencies>
<dependency>
<groupId>org.richfaces.samples</groupId>
<artifactId>richfaces-demo</artifactId>
<version>${richfaces-version}</version>
<classifier>jee5</classifier>
<type>war</type>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>