Así que tengo un proyecto intellij IDEA (proyecto A) que incluye un montón de bibliotecas jar externas. Actualmente estoy trabajando en una de esas bibliotecas jar externas (proyecto B) y quiero reemplazarlo con el proyecto local (proyecto B) en mi computadora.
Entonces, en resumen: tengo el Proyecto A que depende del contenedor B. Quiero reemplazar el contenedor B con mi proyecto local (proyecto B)
De esa manera, cuando ejecuto el proyecto A, usa el Proyecto B local en lugar del Jar B externo. ¿Alguien sabe alguna buena manera fácil de hacer esto?
Solución con gradle:
En el Proyecto A build.gradle agregue mavenLocal() a los repositorios.
... repositories { mavenLocal() maven { url ... } } ... En el Proyecto B , necesita el complemento maven-publish y la tarea relacionada.
plugins { id 'maven-publish' } sourceSets { main { java { srcDir 'src/main/java' } } } task sourcesJar(type: Jar) { from sourceSets.main.allJava classifier = 'sources' } publishing { publications { mavenJava(MavenPublication) { artifactId = rootProject.name //or some string eg.: 'projectb' groupId = project.group //or some string eg.: 'com.example' version = project.version //or some string eg.: '1.0.3.9' from components.java artifact sourcesJar } } } Ahora puede ejecutar la tarea de publicación en publishToMavenLocal desde su terminal o desde Gradle View en IntelliJ. (Está en el lado derecho de forma predeterminada, pestaña Gradle, expanda su proyecto y debajo de la publicación puede encontrar la tarea).
Su caso de uso es exactamente para lo que están hechas las compilaciones compuestas en Gradle. Los documentos incluso mencionan su caso de uso preciso:
Las compilaciones compuestas le permiten […] combinar compilaciones que generalmente se desarrollan de forma independiente, por ejemplo, al probar una corrección de errores en una biblioteca que usa su aplicación
Una compilación compuesta le permite reemplazar de forma temporal y sencilla una biblioteca de dependencia externa con un proyecto de compilación disponible localmente de esa biblioteca. (Incluso funcionaría con múltiples dependencias diferentes).
Así es como configuraría esto para sus dos proyectos (omitiendo los archivos de Gradle Wrapper y el código fuente de Java por concisión):
├── projectA │ ├── build.gradle │ └── settings.gradle └── projectB ├── build.gradle └── settings.gradle Tenga en cuenta que los dos directorios de proyectos en realidad no tienen que ser hermanos. Solo lo he hecho aquí para mantenerlo simple. En mi compilación de muestra mínima, los dos archivos settings.gradle pueden estar vacíos. Los dos scripts de compilación se ven de la siguiente manera.
projectA/build.gradle plugins { id 'java' } dependencies { implementation 'com.example:projectB:1.2.+' } repositories { // where you get the projectB dependency from normally }projectB/build.gradle plugins { id 'java-library' } group = 'com.example' version = '1.2.3' En projectA/ , simplemente ejecute ./gradlew --include-build ../projectB build (o cualquier otra tarea de Gradle que le interese). Asegúrese de usar la ruta correcta al directorio de projectB. La opción --include-build crea automáticamente la compilación compuesta sobre la marcha.
También puede crear una compilación compuesta en IntelliJ. Para hacer eso:
build.gradle para asegurarse de que IntelliJ use automáticamente la configuración de Gradle).build.gradle del proyecto B.Eso es todo. Ahora debería poder usar projectA con su dependencia projectB disponible localmente.
Como tiene la etiqueta "gradle", supongo que la está usando para ambos proyectos. Ejecute "gradlepublishToMavenLocal" en el proyecto B y luego actualice las dependencias del proyecto A.
Solo asegúrese de recordar que hizo esto y elimine el proyecto B de su repositorio local cuando haya terminado.