Недавно я перенес проект из Maven в Gradle (IE: заменил файл pom.xml на файл build.gradle). Поскольку у моей компании все еще есть несколько проектов Maven вниз по течению, которые зависят от нее, мы должны продолжать публиковать файл pom вместе с JAR класса, source и javadoc в наш репозиторий Nexus, чтобы нисходящие проекты все еще могли использовать этот проект как зависимость от Maven. Это то, что для плагина «maven-publish» для Gradle. Вот что мой файл build.gradle выглядит с конфигурациями для Maven-плагин публиковать:Плагин Gradle 'maven-publish' с ошибкой «unmappable character for encoding»
apply plugin: 'java'
apply plugin: 'maven-publish'
group = 'com.my.company'
version = 'myProduct-SNAPSHOT'
repositories {
mavenLocal()
maven { url 'http://nexus.my.company.net/nexus/content/repositories/build-test-release' }
maven { url 'http://nexus.my.company.net/nexus/content/repositories/build-test-snapshot' }
maven { url 'http://nexus.my.company.net/nexus/content/repositories/central' }
maven { url 'http://nexus.my.company.net/nexus/content/repositories/thirdparty' }
}
dependencies {
// Stuff
}
sourceSets {
main {
// Stuff
}
}
task sourcesJar (type: Jar) {
classifier = 'sources'
from sourceSets.main.allJava
}
task javadocJar (type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
publishing {
publications {
mavenJars(MavenPublication) {
// Classes
from components.java
// Sources
artifact(sourcesJar) {
classifier = 'sources'
}
// Javadoc
artifact(javadocJar) {
classifier = 'javadoc'
}
}
}
repositories {
maven {
url 'http://nexus.my.company.net/nexus/content/repositories/build-test-snapshot'
credentials {
username 'user'
password 'password'
}
}
}
}
Это создает Gradle «опубликовать» задачу, которая будет генерировать нужный файл pom.xml, а также класс, источник , и Javadoc JAR. Как только это будет завершено, он опубликует банки в хранилище Nexus «build-test-snapshot».
Это прекрасно работает на моей машине, а также на наших серверах сборки и большинстве моих коллег. Тем не менее, некоторые сотрудники жалуются, потому что «gradlew опубликовать» команду (обратите внимание, что Gradle 2,4 обертка была включена с проектом) не удается на них с ошибками, подобные этим:
C:\Users\user\Perforce\WORKSPACE\project\src\main\java\com\my\company\test\randomizati
on\RandomHelper.java:18: error: unmappable character for encoding Cp1252
private static final String NON_ENGLISH_CHARACTERS = "1234567890─Ç─?─é─â─ä─à─å─ç─ê─ë─è─ï─î─?─Ä─?─?─æ─Æ─ô─ö─ò─û─ù─ÿ─Ö
─Ü─¢─£─?─₧─ƒ─á─í─ó─ú─ñ─Ñ─ª─º─¿─⌐─¬─½─¼─¡─«─»─░─▒─▓─│─┤─╡─╢─╖─╕─╣─║─╗─╝─╜─╛─┐┼Ç┼?┼é┼â┼ä┼à┼å┼ç┼ê┼ë┼è┼ï┼î┼?┼Ä┼?┼?┼æ┼Æ┼ô┼ö┼ò
┼û┼ù┼ÿ┼Ö┼Ü┼¢┼£┼?┼₧┼ƒ┼á┼í┼ó┼ú┼ñ┼Ñ┼ª┼º┼¿┼⌐┼¬┼½┼¼┼¡┼«┼»┼░┼▒┼▓┼│┼┤┼╡┼╢┼╖┼╕┼╣┼║┼╗┼╝┼╜┼╛┼┐╞Ç╞?╞é╞â╞ä╞à╞å╞ç╞ê╞ë╞è╞ï╞î╞?╞Ä╞?╞Æ╞á
╞í╞»╟?╟Ä╟?╟?╟æ╟Æ╟ô╟ö╟ò╟û╟ù╟ÿ╟Ö╟Ü╟¢╟£╟║╟╗╟╝╟╜╟╛╟┐├Ç├?├é├â├ä├à├å├ç├ê├ë├è├ï├î├?├Ä├?├?├æ├Æ├ô├ö├ò├û├ù├ÿ├Ö├Ü├¢├£├?├₧├ƒ├á├í├ó├ú
äåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ&-.*$";
Интересно, что Команда «gradlew build» (которая компилирует проект с использованием javac) отлично работает на всех машинах. Это команда «gradlew publish», которая имеет проблемы на некоторых машинах (либо прохождение, либо отказ на Mac и Windows).
Я не могу сказать, какое ключевое различие здесь, но я подозреваю, что у затронутых пользователей неверно сконфигурированы их клиенты Perforce (нет указанных P4CHARSET) и все файлы проектов синхронизируются с их машинами с кодировкой по умолчанию. Мне непонятно, как проверить, какая кодировка Perforce используется при синхронизации, так что это всего лишь теория. Насколько я понимаю, даже если они исправляют свои конфигурации, им все равно придется уничтожить их призывников и снова загрузить все с сервера Perforce, чтобы получить все файлы с правильной кодировкой (utf16le-bom).
Независимо от любых проблем, связанных с Perforce, вина падает на меня, так как я тот, кто первым переключил нас на Gradle. Если есть способ настроить плагин maven-publish для решения проблемы, я бы предпочел сделать это. Если javac может скомпилировать нестандартные символы из этих файлов в классы, то нет причин, по которым плагин не может их прочитать и генерировать javadoc для них, правильно? Может быть, нужно явно указать, какую кодировку использовать?
Я уже пробовал играть с опцией -Dfile.encoding = x-UTF-16LE-BOM в JAVA_OPTS и GRADLE_OPTS (это не имело значения). Я также нашел следующий фрагмент кода, используемого для указания кодировки для задач «Compile» в Gradle:
tasks.withType(Compile) {
options.encoding = 'x-UTF-16LE-BOM'
}
К сожалению, это для задач «компилировать», и проект уже успешно компиляцией. Я не уверен, какие типы задач генерирует плагин maven-publish, поэтому я не знаю, как применять этот подход для этих задач (возможно ли это?).
Что еще я могу попытаться отключить плагин Gradle maven-publish по сравнению с файловыми кодировками?
Это решило мою проблему с 'tasks.withType (Javadoc) { options.encoding =' UTF-8 ' }' в корне. Благодарю. –