Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Build variants или ifdef - как? / 16 сообщений из 16, страница 1 из 1
07.06.2016, 08:30
    #39251614
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Уважаемые гуру, помогите пожалуйста. Ситуация следующая - есть приложение JSF в *.war, приложение будут использовать 5 клиентов. Для каждого из клиентов приложение отличается лишь ОДНИМ классом и лишь ОДНИМ файлом, который лежит в \webapp\META-INF\context.xml. Согласитесь что глупо создавать 5 копий приложения для каждого из клиентов, а потом все это сопровождать. В андроиде в IDEA с использованием gradle проблема решается весьма просто, но как такое сделать в жаве?
Курю третий день мануалы maven и gradle - но решения не нашел. Дайте пожалуйста пример кода.
...
Рейтинг: 0 / 0
07.06.2016, 08:42
    #39251619
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Рискну предположить что надо взять android+gradle и использовать подход.
...
Рейтинг: 0 / 0
07.06.2016, 08:49
    #39251623
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
maytonРискну предположить что надо взять android+gradle и использовать подход.
Наверное андроидный плагин для gradle ничего не знает о структуре приложения JSF, т.к. а андроиде каталоги приложения совсем иные, или я не прав?
...
Рейтинг: 0 / 0
07.06.2016, 08:53
    #39251628
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Микола Питерский,

1) Для context.xml вот это вот
http://gradle.org/blog/feature-spotlight-gradles-support-maven-pom-profiles/
Но, вообще, я против того чтобы context.xml держать внутри war модуля.
2) Для классов лучше таки запхать в код все 5 вариантов и выбирать нужный в рантайме.

У вас описание проблемы, как обычно. Вы выбрали своё решение своей проблемы и спрашиваете про ваше решение, но не про саму проблему.
...
Рейтинг: 0 / 0
07.06.2016, 08:55
    #39251630
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Blazkowicz1) Для context.xml вот это вот
http://gradle.org/blog/feature-spotlight-gradles-support-maven-pom-profiles/

Хотя, я бы сильно подумал о том подходят ли здесь профили или нужны они вообще. Намного удобнее, по возможности, иметь одну версию .war для всех 5 вариантов. context.xml генерить во время сборки в 5 вариантах и деплоить отдельно от war. Правда в Tomcat нужно тогда отключасть autodeploy, чтобы он context.xml не удалял.

А классы, как я уже написал выше, разруливать в рантайме через полиморфизм.
...
Рейтинг: 0 / 0
07.06.2016, 08:58
    #39251633
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
BlazkowiczУ вас описание проблемы, как обычно. Вы выбрали своё решение своей проблемы и спрашиваете про ваше решение, но не про саму проблему.

Я не выбрал свое решение, я хочу узнать - как лучше решить данную проблему без разницы каким методом, главное чтобы было удобно, просто и надежно?
...
Рейтинг: 0 / 0
07.06.2016, 09:10
    #39251644
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Микола ПитерскийЯ не выбрал свое решение, я хочу узнать - как лучше решить данную проблему без разницы каким методом, главное чтобы было удобно, просто и надежно?
Ну, так вы знаете проблему. А мы нет. Мы знаем только предложенное вами решение в виде "прекомиляции".
Чем именно отличаются классы и context.xml?
...
Рейтинг: 0 / 0
07.06.2016, 09:53
    #39251676
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Микола Питерский,
А что мешает сделать нехардкод...
Ну включите к себе в проект какой нибудь ScriptEngener
И по какому то признаку(login клиента его ИНН в базе и т.д) делаете ветвление.
...
Рейтинг: 0 / 0
07.06.2016, 10:46
    #39251712
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Микола ПитерскийmaytonРискну предположить что надо взять android+gradle и использовать подход.
Наверное андроидный плагин для gradle ничего не знает о структуре приложения JSF, т.к. а андроиде каталоги приложения совсем иные, или я не прав?
Попробуй maven profiles. В твоём случае надо создать 5 профилей по 5 клиентам.

http://maven.apache.org/guides/introduction/introduction-to-profiles.html
...
Рейтинг: 0 / 0
07.06.2016, 12:27
    #39251807
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
maytonМикола Питерскийпропущено...

Наверное андроидный плагин для gradle ничего не знает о структуре приложения JSF, т.к. а андроиде каталоги приложения совсем иные, или я не прав?
Попробуй maven profiles. В твоём случае надо создать 5 профилей по 5 клиентам.

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Попробовал - не получилось. Если бы кто показал бы свой .pom с решением аналогичной проблемы. Так как спрашивал у знакомых - все говорят что на 5 клиентов надо 5 копий программы - а что ты хочешь это же жава:)
Но если в андроиде эту проблему при помощи gradle сосилили - неужто для жавы нету никакого плагина умеющего это делать?
...
Рейтинг: 0 / 0
07.06.2016, 12:31
    #39251810
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Микола Питерскийвсе говорят что на 5 клиентов надо 5 копий программы - а что ты хочешь это же жава:)
Ну, что с них взять, если они Java в глаза не видели.

[quot Микола Но если в андроиде эту проблему при помощи gradle сосилили - неужто для жавы нету никакого плагина умеющего это делать?[/quot]
Ну, что за бред? Андроид это почти та же Java, и тот же Gradle для сборки. Если вы умеете делать это под андроид, то что вам мешает сделать тоже самое под JEE?
...
Рейтинг: 0 / 0
07.06.2016, 12:35
    #39251818
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
BlazkowiczНу, так вы знаете проблему. А мы нет. Мы знаем только предложенное вами решение в виде "прекомиляции".
Чем именно отличаются классы и context.xml?

Да -если вариант с перекомпиляцией не пройдет - остается только программно разрулить - для класса это не проблема, а вот для context.xml не знаю как сделать - там данные для jDBC подключения и для каждого клиента он другой и вызывается он из web.xml
Как программно подключить другой context.xml? Еще тогда проблема будет - в *.war будет 5 context.xml для каждого клиента - что есть плохо тамже реквизиты доступа, как сделать чтобы из готового *.war "лишние" context.xml удалялись?
И еще - в андроиде можно для финальной сборки "натравить" обфускатор proguard, который вырежет все ненужное - н-р в классе вырежет данные по 4-м клиентам, как неиспользуемые. А как быть с этим в жаве? Или правда 5 клиентов - 5 проектов?
...
Рейтинг: 0 / 0
07.06.2016, 12:43
    #39251825
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Микола Питерскийа вот для context.xml не знаю как сделать - там данные для jDBC подключения и для каждого клиента он другой и вызывается он из web.xml
Ну, вот это, ведь, уже совсем другой разговор. По сути. Выходит не нужен вам context.xml внутри war. В этом смысла 0. С таким подходом вы пароли от БД для всех 5 клиентов должны держать в репозитории исходного кода. А всего-то надо DataSource настроить на самом сервере. Доступ к серверу клиента имеет админ. Пароль от базы тоже имеет админ. Это целиком и полностью его работа.
Вам нужно только договорить о JNDI имени и использовать его. Таким образом вы сможете один единственный .war деплоить хоть на 5 серверов, хоть на 10. Вам не нужно будет пересобирать ваш war модуль каждый раз когда пароль к БД заэкспарится, например.
Подумайте об этом. Такой подход упрощает деплоймент и саппорт очень сильно.

И только если по каким-то надуманным ограничениям вам такой вариант не подходит, тогда есть смысл использовать профили Maven. О том как их использовать из Gradle, я вам выше дал ссылку.
...
Рейтинг: 0 / 0
07.06.2016, 12:52
    #39251847
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
BlazkowiczНу, что за бред? Андроид это почти та же Java, и тот же Gradle для сборки. Если вы умеете делать это под андроид, то что вам мешает сделать тоже самое под JEE?
Да но только в андроиде для Gradle используется специальный плагин apply plugin: 'com.android.application'
и только тогда Gradle и IDEA понимает многовариантную сборку и в IDEA после этого появляется вкладка с вариантами компиляции со значком андроида. Если есть такой плагин для жавы - подскажите пожалуйста.

Вот конфиг Gradle для андроида - в результате есть 6 вариантов сборки проекта local, demo, full - это каталоги на уровне каталога main. В этих каталогах лежат файлы с именами такими же как и в main и соотвествующая сборка заменяет этими файлами файлы из main.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
apply plugin: 'com.android.application'

android {
 
    buildTypes {
        debug {
            minifyEnabled false
            debuggable true
        }
        release {
            // ProGuard
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
            // end ProGuard
            signingConfig signingConfigs.release
            debuggable false
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    output.outputFile = new File(output.outputFile.parent, applicationId + "-" + defaultConfig.versionName + "-" + variant.buildType.name + ".apk")
                }
            }
        }
   }

    productFlavors {
        // для локальных клиентов
        local {
            applicationId '.local'
            signingConfig signingConfigs.release           
            resValue "string", "app_suff", "(Local use)"
        }
        // для google DEMO version
        demo {
            applicationId '.demo'
            signingConfig signingConfigs.release
            resValue "string", "app_suff", "(DEMO)"
        }
        // для google FULL version
        full {
            applicationId '.full'
            signingConfig signingConfigs.release
            resValue "string", "app_suff", "(FULL)"
        }
    }
 
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:21.0.0'
    compile 'com.android.support:support-v4:21.0.0'  
}



Вот как такое прикрутить к жаве?
...
Рейтинг: 0 / 0
07.06.2016, 19:50
    #39252323
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Микола ПитерскийДля каждого из клиентов приложение отличается лишь ОДНИМ классом и лишь ОДНИМ файлом, который лежит в \webapp\META-INF\context.xmlКурить доку по описателям развёртывания вашего сервлет-контейнера.
...
Рейтинг: 0 / 0
07.06.2016, 19:56
    #39252325
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Build variants или ifdef - как?
Микола Питерский, посмотри еще тут пример
http://stackoverflow.com/questions/1149352/using-maven-for-multiple-deployment-environment-production-development
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Build variants или ifdef - как? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]