diff --git a/nx-dev/nx-dev/app/java/page.tsx b/nx-dev/nx-dev/app/java/page.tsx new file mode 100644 index 0000000000..9d73fe038d --- /dev/null +++ b/nx-dev/nx-dev/app/java/page.tsx @@ -0,0 +1,66 @@ +import { DefaultLayout } from '@nx/nx-dev/ui-common'; +import { + CallToAction, + Features, + FeatureSections, + GettingStarted, + Hero, + Resources, +} from '@nx/nx-dev/ui-gradle'; + +import type { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Nx For Java', + description: + 'Add Nx to your Java project for distributed task execution, intelligent caching, and affected commands.', + alternates: { + canonical: 'https://nx.dev/java', + }, + openGraph: { + url: 'https://nx.dev/java', + title: 'Nx For Java', + description: + 'Add Nx to your Java project for distributed task execution, intelligent caching, and affected commands.', + images: [ + { + url: 'https://nx.dev/socials/nx-gradle-media.png', + width: 800, + height: 421, + alt: 'Nx For Java', + type: 'image/jpeg', + }, + ], + siteName: 'Nx', + type: 'website', + }, +}; + +export default function JavaPage(): JSX.Element { + return ( + + + +
+
+ +
+ + {/*
*/} + {/* */} + {/*
*/} +
+ + {/*
*/} + {/* */} + {/*
*/} + +
+ +
+
+ +
+
+ ); +} diff --git a/nx-dev/nx-dev/public/images/enterprise/nx-affected.avif b/nx-dev/nx-dev/public/images/enterprise/nx-affected.avif new file mode 100644 index 0000000000..00a57f5dec Binary files /dev/null and b/nx-dev/nx-dev/public/images/enterprise/nx-affected.avif differ diff --git a/nx-dev/nx-dev/public/socials/nx-java-media.png b/nx-dev/nx-dev/public/socials/nx-java-media.png new file mode 100644 index 0000000000..aa02270e0d Binary files /dev/null and b/nx-dev/nx-dev/public/socials/nx-java-media.png differ diff --git a/nx-dev/ui-gradle/.babelrc b/nx-dev/ui-gradle/.babelrc new file mode 100644 index 0000000000..1ea870ead4 --- /dev/null +++ b/nx-dev/ui-gradle/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nx/react/babel", + { + "runtime": "automatic", + "useBuiltIns": "usage" + } + ] + ], + "plugins": [] +} diff --git a/nx-dev/ui-gradle/.eslintrc.json b/nx-dev/ui-gradle/.eslintrc.json new file mode 100644 index 0000000000..a39ac5d057 --- /dev/null +++ b/nx-dev/ui-gradle/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["plugin:@nx/react", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/nx-dev/ui-gradle/README.md b/nx-dev/ui-gradle/README.md new file mode 100644 index 0000000000..d457313776 --- /dev/null +++ b/nx-dev/ui-gradle/README.md @@ -0,0 +1,7 @@ +# nx-dev-ui-gradle + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test nx-dev-ui-gradle` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/nx-dev/ui-gradle/jest.config.ts b/nx-dev/ui-gradle/jest.config.ts new file mode 100644 index 0000000000..c7d1d4865d --- /dev/null +++ b/nx-dev/ui-gradle/jest.config.ts @@ -0,0 +1,10 @@ +/* eslint-disable */ +export default { + displayName: 'nx-dev-ui-gradle', + preset: '../../jest.preset.js', + transform: { + '^.+\\.[tj]sx?$': ['babel-jest', { presets: ['@nx/react/babel'] }], + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + coverageDirectory: '../../coverage/nx-dev/ui-gradle', +}; diff --git a/nx-dev/ui-gradle/project.json b/nx-dev/ui-gradle/project.json new file mode 100644 index 0000000000..384bc66f39 --- /dev/null +++ b/nx-dev/ui-gradle/project.json @@ -0,0 +1,8 @@ +{ + "name": "nx-dev-ui-gradle", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "nx-dev/ui-gradle/src", + "projectType": "library", + "tags": [], + "targets": {} +} diff --git a/nx-dev/ui-gradle/src/index.ts b/nx-dev/ui-gradle/src/index.ts new file mode 100644 index 0000000000..f41a696fd2 --- /dev/null +++ b/nx-dev/ui-gradle/src/index.ts @@ -0,0 +1 @@ +export * from './lib'; diff --git a/nx-dev/ui-gradle/src/lib/call-to-action.tsx b/nx-dev/ui-gradle/src/lib/call-to-action.tsx new file mode 100644 index 0000000000..eb168780b5 --- /dev/null +++ b/nx-dev/ui-gradle/src/lib/call-to-action.tsx @@ -0,0 +1,130 @@ +import { ButtonLink, SectionHeading } from '@nx/nx-dev/ui-common'; +import { GradleIcon } from '@nx/nx-dev/ui-icons'; +import { cx } from '@nx/nx-dev/ui-primitives'; +import React, { ReactElement } from 'react'; +import Link from 'next/link'; + +export function CallToAction(): ReactElement { + return ( +
+ {/* Background pattern */} + + + {/* Gradient background */} +
+ ); +} diff --git a/nx-dev/ui-gradle/src/lib/feature-sections.tsx b/nx-dev/ui-gradle/src/lib/feature-sections.tsx new file mode 100644 index 0000000000..10de52f631 --- /dev/null +++ b/nx-dev/ui-gradle/src/lib/feature-sections.tsx @@ -0,0 +1,137 @@ +import { ReactElement } from 'react'; +import { ButtonLink, SectionHeading } from '@nx/nx-dev/ui-common'; + +export function FeatureSections(): ReactElement { + return ( +
+
+ + Supercharge your Java Projects{' '} + + with Nx + + + +
+ {/* Affected Section */} + + + {/* Remote Caching Section */} + + + {/* Distribution Section */} + + + {/* Atomizer Section */} + + + {/* Flaky Test Retries Section */} + +
+
+
+ ); +} + +interface FeatureSectionProps { + title: string; + description: string; + imageSrc: string; + alt: string; + tag: string; + href: string; + reversed?: boolean; +} + +function FeatureSection({ + title, + description, + imageSrc, + alt, + tag, + href, +}: FeatureSectionProps): ReactElement { + return ( +
+
+ {alt} +
+
+
+ + {tag} + +

+ {title} +

+

+ {description} +

+
+ + Learn more + + +
+
+
+
+ ); +} diff --git a/nx-dev/ui-gradle/src/lib/features.tsx b/nx-dev/ui-gradle/src/lib/features.tsx new file mode 100644 index 0000000000..c7fa66a976 --- /dev/null +++ b/nx-dev/ui-gradle/src/lib/features.tsx @@ -0,0 +1,277 @@ +import { SectionHeading } from '@nx/nx-dev/ui-common'; +import { cx } from '@nx/nx-dev/ui-primitives'; +import React, { ReactElement } from 'react'; + +export function Features(): ReactElement { + return ( + <> + + Features + + +

+ The Nx Plugin for Java integrates seamlessly with your existing Gradle + builds, adding powerful capabilities to your workflow. +

+ +
+ + + + + } + /> + + + + + + + } + /> + + + + + } + /> + + + + + + + + + + + } + /> + + + + + + + } + /> + + + + + + } + /> +
+ + ); +} + +interface FeatureCardProps { + title: string; + description: string; + icon: JSX.Element; + href?: string; +} + +function FeatureCard({ + title, + description, + icon, + href = '#', +}: FeatureCardProps): ReactElement { + return ( + +
+
+
+ {icon} +
+

{title}

+

{description}

+
+
+
+ ); +} diff --git a/nx-dev/ui-gradle/src/lib/hero.tsx b/nx-dev/ui-gradle/src/lib/hero.tsx new file mode 100644 index 0000000000..5f2eed0e40 --- /dev/null +++ b/nx-dev/ui-gradle/src/lib/hero.tsx @@ -0,0 +1,148 @@ +/* eslint-disable @nx/enforce-module-boundaries */ +import { + ButtonLink, + SectionHeading, + Strong, + SectionDescription, +} from '@nx/nx-dev/ui-common'; +import { JavaIcon } from '@nx/nx-dev/ui-icons'; +/* eslint-enable @nx/enforce-module-boundaries */ +import { ReactElement } from 'react'; + +export function Hero(): ReactElement { + return ( +
+
+ {/* Logo displayed above the title */} +
+
+ +
+
+ + + Supercharge Your Java Projects + + + Get distributed tasks, intelligent caching, and target affected + packages to optimize your build process and CI pipeline. Support for{' '} + Gradle and Maven (coming soon) + + +
+ + Get Started with Nx for Java + + + + View Example Project{' '} + + +
+
+
+ ); +} + +export function GettingStarted(): ReactElement { + return ( +
+
+
+
+

+ Add Nx To An Existing Project +

+

+ Currently Nx only supports Gradle. Support for Maven will come soon +

+
+ +
+ + + + + +
+ + {/* GitHub example project link */} +
+ + + + + View Example Project on GitHub + +
+
+
+ ); +} + +interface GetStartedCardProps { + title: string; + command: string; + description: string; +} + +function GetStartedCard({ + title, + command, + description, +}: GetStartedCardProps): ReactElement { + return ( +
+

+ {title} +

+
+ {command} +
+

+
+ ); +} diff --git a/nx-dev/ui-gradle/src/lib/index.ts b/nx-dev/ui-gradle/src/lib/index.ts new file mode 100644 index 0000000000..718d1d40db --- /dev/null +++ b/nx-dev/ui-gradle/src/lib/index.ts @@ -0,0 +1,5 @@ +export * from './hero'; +export * from './features'; +export * from './resources'; +export * from './call-to-action'; +export * from './feature-sections'; diff --git a/nx-dev/ui-gradle/src/lib/resources.tsx b/nx-dev/ui-gradle/src/lib/resources.tsx new file mode 100644 index 0000000000..e8504ea77d --- /dev/null +++ b/nx-dev/ui-gradle/src/lib/resources.tsx @@ -0,0 +1,71 @@ +import { ButtonLink, SectionHeading, TextLink } from '@nx/nx-dev/ui-common'; +import { cx } from '@nx/nx-dev/ui-primitives'; +import React, { ReactElement } from 'react'; + +export function Resources(): ReactElement { + return ( + <> + + Resources + +

+ Learn more about using Nx with Java projects with these resources. +

+ +
+ + + + + +
+ + ); +} + +interface ResourceCardProps { + title: string; + description: string; + linkText: string; + href: string; +} + +function ResourceCard({ + title, + description, + linkText, + href, +}: ResourceCardProps): ReactElement { + return ( +
+
+

{title}

+

{description}

+
+
+ + {linkText} + +
+
+ ); +} diff --git a/nx-dev/ui-gradle/tsconfig.json b/nx-dev/ui-gradle/tsconfig.json new file mode 100644 index 0000000000..3c41f10fb2 --- /dev/null +++ b/nx-dev/ui-gradle/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "allowJs": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../tsconfig.base.json" +} diff --git a/nx-dev/ui-gradle/tsconfig.lib.json b/nx-dev/ui-gradle/tsconfig.lib.json new file mode 100644 index 0000000000..11b228c24f --- /dev/null +++ b/nx-dev/ui-gradle/tsconfig.lib.json @@ -0,0 +1,24 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "types": [ + "node", + "@nx/react/typings/cssmodule.d.ts", + "@nx/react/typings/image.d.ts" + ], + "lib": ["DOM", "es2019"] + }, + "exclude": [ + "jest.config.ts", + "src/**/*.spec.ts", + "src/**/*.test.ts", + "src/**/*.spec.tsx", + "src/**/*.test.tsx", + "src/**/*.spec.js", + "src/**/*.test.js", + "src/**/*.spec.jsx", + "src/**/*.test.jsx" + ], + "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] +} diff --git a/nx-dev/ui-gradle/tsconfig.spec.json b/nx-dev/ui-gradle/tsconfig.spec.json new file mode 100644 index 0000000000..26ef046ac5 --- /dev/null +++ b/nx-dev/ui-gradle/tsconfig.spec.json @@ -0,0 +1,20 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ] +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 9d061d55fc..60b28521f4 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -107,6 +107,7 @@ "@nx/nx-dev/ui-customers": ["nx-dev/ui-customers/src/index.ts"], "@nx/nx-dev/ui-enterprise": ["nx-dev/ui-enterprise/src/index.ts"], "@nx/nx-dev/ui-fence": ["nx-dev/ui-fence/src/index.ts"], + "@nx/nx-dev/ui-gradle": ["nx-dev/ui-gradle/src/lib/index.ts"], "@nx/nx-dev/ui-home": ["nx-dev/ui-home/src/index.ts"], "@nx/nx-dev/ui-icons": ["nx-dev/ui-icons/src/index.ts"], "@nx/nx-dev/ui-markdoc": ["nx-dev/ui-markdoc/src/index.ts"],